web-dev-qa-db-ja.com

Node続行する前に非同期関数を待つ

一部の非同期機能を使用するノードアプリケーションがあります。

残りのアプリケーションフローに進む前に、非同期関数が完了するのを待つにはどうすればよいですか?

以下は簡単な例です。

var a = 0;
var b = 1;
a = a + b;

// this async function requires at least 30 sec
myAsyncFunction({}, function(data, err) {
    a = 5;
});

// TODO wait for async function

console.log(a); // it must be 5 and not 1
return a;

この例では、返される要素「a」は1ではなく5である必要があります。アプリケーションが非同期関数を待機しない場合、1に等しくなります。

ありがとう

17
user2520969

コールバックメカニズムの使用:

function operation(callback) {

    var a = 0;
    var b = 1;
    a = a + b;
    a = 5;

    // may be a heavy db call or http request?
    // do not return any data, use callback mechanism
    callback(a)
}

operation(function(a /* a is passed using callback */) {
    console.log(a); // a is 5
})

非同期待機の使用

async function operation() {
    return new Promise(function(resolve, reject) {
        var a = 0;
        var b = 1;
        a = a + b;
        a = 5;

        // may be a heavy db call or http request?
        resolve(a) // successfully fill promise
    })
}

async function app() {
    var a = await operation() // a is 5
}

app()
33
Ozgur