4

私はノードを学び、API を書いています。私の API 呼び出しの 1 つは、コンマ区切りのタグを含む Tags というパラメーターを取り、それぞれをディスクに保存します (私は MongoDB + Mongoose を使用しています)。通常、API で DB に保存するときは、コールバックを渡し、そのコールバック内で保存した後も続行しますが、ここでは、ディスクに保存するオブジェクトの数が可変であり、すべてを保存する最もクリーンな方法がわかりません。これらのタグをディスクに保存し、後でそれらを参照するオブジェクトを保存します。誰もが使用するクリーンな非同期パターンを提案できますか? ありがとう!

4

2 に答える 2

8

asyncは、これらのタスクに適したノード ライブラリです。

複数の非同期呼び出しを並列または連続で実行し、その後 1 つのコールバックをトリガーします。

async.parallel([
    function(){ ... },
    function(){ ... }
], callback);

async.series([
    function(){ ... },
    function(){ ... }
]);
于 2012-10-29T21:32:41.763 に答える
3

これは、追加の依存関係が必要ない場合によく使用する一般的なコードパターンです。

var tags = ['tag1', 'tag2', 'tag3'];
var wait = tags.length;
tags.forEach(function (tag) {
    doAsyncJob(tag, done);
});

function done() {
    if (--wait === 0) allDone();
}

このコードは、配列の各項目に対してdoAsyncJob(tag、callback)を並列に実行し、各ジョブが完了したときにallDoneを呼び出します。データを継続的に(次々に)処理する必要がある場合は、次のパターンがあります。

(function oneIteration() {
    var item = tags.shift();
    if (item) {
        doAsyncJob(item, oneIteration);
    } else {
        allDone();
    }
})();
于 2012-10-29T21:39:41.680 に答える