我对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是否返回一个数组?第一个论点?
答案 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实现)。只需使用数组或对象(取决于您的数据结构)。