2016-06-13 11 views
-1

async.eachループを中断させ、条件が満たされたときに特定の値/エラーを戻す方法。たとえば、この場合、ステータスが存在する場合、アイテムの残りの部分を反復するのではなく、関数 'check'から何かを返すことを望みます。助言がありますか?条件が満たされた場合、asyncを完全に中断する

const check = (condition) => { 

    if (condition === 100) { 

      async.each(items, (item, callback) => { 

       if (status) { 

        callback(Boom.conflict('Conflict')); 
       } else { 

        // some logic 
        callback(destroyInstance); 
       } 
      }); 
    } 
}; 
+0

hapiのハンドラで返信できるように、チェック関数にコールバックパラメータが必要です。 –

答えて

0

これは、この質問の重複のようになります。

Break out of javascript nested async.each loop but continue main loop

チェックアウト答えは、それはあなたを助ける必要があります。その場合、それは別の非同期ループ内のネストされた非同期ですが、答えはまだ有効です。

編集次のよう

溶液、そのスレッド内の余分な層なしで示されているように、である:

async.each(subArray, function(item, callback) { 
     if (SOME_CONDITION) { 
     // Break out of async 
     var err = new Error('Broke out of async'); 
     err.break = true; 
     return callback(err); 
     } 
     // continue 
     callback(); 

     }, function(err) { 
     if (err && err.break) { 
      // Handle break out of async here 
     } else { 
      // Otherwise handle here 
     } 
     }); 
+0

ありがとう、それは働いた –

+0

それを聞いてうれしい!これを回答としてマークして、他の人も同様に使用できるようにしてください。私は先に進み、その質問とは多少異なるので、この他の質問からの解決策を追加します。 – Sam

0

async.eachアイテム配列内の各項目に並列に動作として。アイテムの実行順序は決定的ではないため、アクションをどのような状態でも停止することはできません。代わりにasync.eachSeriesを使うべきだと思います。

したがって、実行する必要があるのはエラー(return callback(err))です。これが実行されると、さらに実行が停止されます。そして、あなたがスローしてエラーの代わりにいくつかの値を送信したい場合は、エラーを送信し、async.eachSeriesのメインコールバックをチェックインしている間に、あなたはuと同じiterateeコールバック関数から得た値の型をチェックするだけですたとえば、次のようになります。

async.eachSeries(items, function iteratee(item, callback) { 
    if (status) { 
    return callback(E/V); // error(E) or value(V) u want to send to the done function 
    } else { 
    // some logic 
    callback(); 
    } 
}, function done(e) { 
    if(e){ 
    if(type of e === TYPE OF RETURN VALUE U WANTED) // or any other logic u can come up with 
    return cb(null, e); 
    else return cb(e); 
    } 
    else cb(null, //...); 
}); 

私にそれが動作するかどうか教えてください。

+0

はい、これは機能しました。ありがとう –

関連する問題