2017-07-15 15 views
0

私はlodash _.forEachループと_.forEachループを使用しています。私は複数の約束を使用しており、配列の約束を入れています。 sendEmailApiメソッドを使用して私はユーザーに電子メールを送信しています、私の要件は、私が外側の_.forEachループを終了したい場合は、すべての約束を処理したくありません。 次のコードは書かれてますが、私はNodejs foreachループブレイク(約束の結果を使用)

_.forEach(result, function (value, index) { 
    _.forEach(value, function (value1, index1) { 
     if(!displayName) 
      displayName = value1.displayname; 
     productList += '"' + value1.productplannames + '",'; 
    }); 
    tempJsonStr = '{"email":"' + index + '","displayname":"' + displayName + '","productplannames":[' + _.trim(productList, ",") + ']}'; 
    console.log("tempJsonStr",tempJsonStr); 
    productList =""; 
    displayName=""; 
    promises.push(emailUtils.sendEmailApiProcess(JSON.parse(tempJsonStr),responsePayLoad,task,done).then(function() { 
    }).catch(err => { 
     console.log("errrrrrrrrr"); 
    return false; 
    })) 

}); 

Promise.all(promises).then(function() { 
    console.log("All done"); 
}); 
+3

'_.forEach()'ループは、電子メール要求のいずれかの前に終了:約束は/が拒否解決されるまで待機しますPromise.each、完了しました。 – Pointy

+1

このような独自のJSONを構築しないでください - JSON.stringifyを使用して、約束の仕組みを学び、非同期コードの流れを学んでください - https://stackoverflow.com/questions/14220321/how-do-i-return-the-非同期呼び出しからの応答 –

+0

あなたは 'productList'と' displayName'を本当に変なシーケンスで初期化しています – Bergi

答えて

0

ための約束の非同期動作の、古典的なforeachループがそれぞれれるまで待機しませんループの途中でのエラーを取得した場合に動作していない、それは全体_.forEachループを処理しています約束の解決/拒否。したがって、プロミスがもはや保留していない各反復の最後には、あなたは確信することができません。約束の

青い鳥の実装は、このためのきちんとした機能を持っています http://bluebirdjs.com/docs/api/promise.each.html

+0

私のコードの各コードを約束するいくつかのサンプルを共有できます –

+0

私は拒否を得るとすぐに約束を破りたい1つの約束は、すべての約束を処理したくない –

関連する問題