1. ホーム
  2. javascript

[解決済み] Javascriptで非同期タスクが完了するのを待つ最も簡単な方法とは?

2022-10-31 15:53:44

質問

私はいくつかのmongodbコレクションを削除したいのですが、それは非同期タスクです。コードは次のようになります。

var mongoose = require('mongoose');

mongoose.connect('mongo://localhost/xxx');

var conn = mongoose.connection;

['aaa','bbb','ccc'].forEach(function(name){
    conn.collection(name).drop(function(err) {
        console.log('dropped');
    });
});
console.log('all dropped');

コンソールに表示されます。

all dropped
dropped
dropped
dropped

を確認する最も簡単な方法は何ですか? all dropped が表示されるようにする最も簡単な方法は何ですか?コードを簡略化するために、任意のサードパーティを使用することができます。

どのように解決するのですか?

私はあなたが使用している参照してください mongoose を使用しているので、サーバーサイドのJavaScriptについて話しているのでしょう。その場合、私は 非同期モジュール を使い async.parallel(...) . このモジュールは、あなたが悩んでいる問題を解決するために開発されたもので、本当に役に立つと思います。あなたのコードは次のようになるかもしれません。

var async = require('async');

var calls = [];

['aaa','bbb','ccc'].forEach(function(name){
    calls.push(function(callback) {
        conn.collection(name).drop(function(err) {
            if (err)
                return callback(err);
            console.log('dropped');
            callback(null, name);
        });
    }
)});

async.parallel(calls, function(err, result) {
    /* this code will run after all calls finished the job or
       when any of the calls passes an error */
    if (err)
        return console.log(err);
    console.log(result);
});