簡體   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