5

非常に奇妙な問題が発生しています。いくつかの大きな xml ファイルをインポートして、それらを mongoDB に保存しています。アルゴリズムは、典型的な非同期ループです。

doLoop = function( it, callback_loop ) {
    if( it < no_of_items ) {
        storeToMongo( ..., function( err, result ) {
                ...
                doLoop( it+1, callback_loop );
        });
    } else {
        callback_loop();
    }
};
doLoop( 0, function() {
    ...
});

今(突然、コードに目立った変更はありません)ループの実行中に次のエラーが発生します。

events.js:72
        throw er; // Unhandled 'error' event
              ^
Error: connect EADDRNOTAVAIL
    at errnoException (net.js:901:11)
    at connect (net.js:764:19)
    at net.js:842:9
    at dns.js:72:18
    at process._tickCallback (node.js:415:13)

エラーは約 1 分後に発生します。その間に処理されるアイテムの数は常にまったく同じですが、正確ではありません。

connect/netエラーの原因を突き止めようとしましたが、わかりません。私のコードにはソケット接続がありません。redis に接続していますが、問題ありません。mongoDB 接続ですか? しかし、なぜ突然失われるのでしょうか。

ループ全体を実行するのに役立つ唯一のことは、次のように mongo-callback 内で再帰ループ呼び出しを実行することです。

setTimeout( function() {
    doLoop( it+1, callback_loop );
},1);

ここで何がうまくいかないのか考えている人はいますか?

ありがとう、ヘイノブ

4

3 に答える 3

4

最後に、私は答えを見つけました。これは、デフォルトのグローバル http エージェント内の問題です。ここで完全な説明を参照してください。

于 2014-01-08T11:15:31.073 に答える