我正在尝试学习并更好地了解承诺如何与新的async
/ await
关键字一起使用,但有一件事令人困惑。
在本文中:https://davidwalsh.name/async-await
它说使用async
和await
并不需要使用回调,例如:
async function parallel(callback) {
const wait1 = wait(500);
const wait2 = wait(500);
await wait1;
await wait2;
callback( [wait1, wait2] );
}
如果要测试它,我们需要首先定义一个用作wait
的超时函数:
var wait = function(time) {
return new Promise( function(resolve, reject) {
setTimeout(function() {
resolve( Math.random() * time );
}, time);
});
};
最后我们需要调用我们的parallel
函数并读取值:
parallel(function(data) {
console.log('data', data);
});
问题在于,如果您读取值 - 它们是承诺对象而不是实际值,为了解决这个问题,可以这样做:
async function parallel(callback) {
var wait1 = wait(500).then(function(data) {
wait1 = data;
});
var wait2 = wait(500).then(function(data) {
wait2 = data;
});
await wait1;
await wait2;
callback( [wait1, wait2] );
}
现在它会起作用,在这里演示:https://jsfiddle.net/jp3g2q5k/
但是你能帮我理解为什么我必须使用.then
回调吗?它假设是回调自由的情况。或者也许有人知道如何在没有回调的情况下改变此代码。
答案 0 :(得分:1)
您正在通过等待'来解决承诺。关键词。在您的示例中:
const result1 = await wait1;
const result2 = await wait2;
callback( [result1 , result2 ] );