繁体   English   中英

承诺异步等待而没有.then回调

[英]promise async await without .then callback

我试图学习并更好地理解async如何与新的async / await关键字一起工作,但是有些事情令人困惑。

在本文中: https : //davidwalsh.name/async-await

它说使用asyncawait不需要使用回调,例如:

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);
});

问题是,如果您读取值-它们是一个Promise对象而不是实际值,则可以解决此问题:

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回调吗? 它应该是没有回调的情况。 也许有人知道如何更改此代码以使其不使用回调。

您正在使用'await'关键字解决承诺。 在您的示例中将是:

const result1 = await wait1;
const result2 = await wait2;
callback( [result1 , result2 ] );

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM