Asyncawait.js在回调中有多个参数

时间:2016-02-25 17:30:04

标签: javascript async-await

我对asyncawait库越来越感到满意。

如果我是对的,请:

var doSth = async function() {
  var asyncResult = await promiseReturningFunction();
  subFunction(asyncResult);
};

相当于:

var doSth = function() {
  promiseReturningFunction().then(function(asyncResult) {
    subFunction(asyncResult);
  });
};

但是如果回调有两个参数.then(function(asyncResult1, asyncResult2) {})

怎么办?

在其他一些语言中,我写道:

  var asyncResult1, asyncResult2 = await promiseReturningFunction();

但我不能在JS中这样做,可以吗? await是否返回一个数组?第一个论点?

3 个答案:

答案 0 :(得分:6)

  

我不能在JS中这样做,可以吗?

不,你不能。承诺只用一个值来实现。

JavaScript没有元组,但您可以使用数组。通过解构,您可以使其看起来几乎与其他语言一样:

async function promiseReturningFunction() {
    await …;
    …
    return [result1, result2];
}

// elsewhere (in an async function):
var [asyncResult1, asyncResult2] = await promiseReturningFunction();

答案 1 :(得分:2)

您可以轻松地使用destructuring这样的一系列承诺:

var [r1, r2, r3] = await Promise.all([p1, p2, p3]);

var promises = [p1(), p2(), p3()];
$q.all(promises)
  .then(function ([p1Result, p2Result, p3Result]) {
      // ...
  });

所以你会:

async function doSth() {
    var [asyncResult1, asyncResult1] = await promiseReturningFunction();
    var asyncLastResult = await subFunction(asyncResult1);

    return asyncLastResult;
}

doSth();

答案 2 :(得分:0)

Promise只能将一个参数传递给履行回调。 As Benjamin Gruenbaum writes:

  

[...]只有第一个参数将被视为promise构造函数中的分辨率值。您可以使用复合值(如对象或数组)进行解析。

Here is the section in the Promises/A+ specification

所以你的情况有两个参数不会出现在JavaScript中(至少没有标准的promise实现)。只需使用数组或对象(取决于您的数据结构)。