2

配列を反復処理し、再度反復処理している配列を使用してコールバックを呼び出す各アイテムの非同期操作をトリガーするという問題に直面していることに気付きました...もちろん、次のアイテムに進む前に、前のアイテムを待つ必要があります。終了。また、アイテムの処理中にエラーが発生した場合は、囲んでいるすべてのループを停止して終了する必要があります。

これらの状況を処理するために私が書いたコードは、書くのは簡単ですが、読み取り/保守は簡単ではありません。この質問を完全にするために、私は現在、次のような方法を使用しています。

iterate(items, item_callback, ended_callback);

item_callbackは次のようになります。

function(item, next_item, stop) {

    //do your stuff with `item` here...

    //return next_item() to go forward
    //return stop() to break
}

node.jsで反復するためのより良いテクニックが欠けているのではないかと思います。

時間の例:

User.find(function(err, users) {
    //iterate through users: how?
    //first attempt: for
    for(var i in users) {
        //simple stuff works here... but if I call something async... what do I do?
        //like iterating through friends
        User.find({friend:users[i]._id}, function(err, friends) {
            if(err) {
                 //handle error: how is best to do this?
            }
            //this might end after the next user is selected... and might break things
        });
    }
});

TL; DR:非同期コードと従来の同期コードの両方で機能するようにnode.jsで反復する方法は?

asyncPS:モジュールの使用に沿って、一部のユーザーが何かに答えると確信しています。私はそれについて知っています。コードを使用したときのコードが気に入らない。現在のソリューションよりも保守性がさらに低くなります。もっと良いものが必要です。

4

2 に答える 2

1

非同期操作を処理するためのnode.jsフロー制御ライブラリはたくさんあります。それらはすべてわずかに異なるアプローチと構文糖衣を持っていますが、 asyncおそらく最も人気があります。Step私はそれがパワーウェイトレシオであることを好みます。:)

于 2013-01-11T21:16:53.443 に答える
0

私が正しく得た場合のあなたの例はマングースの使用法です。promiseに基づく次のソリューションを参照してください:Node.js deferred promisify + mongoose

于 2013-01-23T11:20:15.303 に答える