setTimeoutを使用するように指示されていますが、foreachの完了後にはどうすればよいですか?ノードjs foreach done関数
app.post('/grid', function(req, res){
getResults(req.body.idarray, function(callback){
res.send(callback);
});
});
function getResults(userIds, callback) {
var totalresult = [];
userIds.forEach(function (user) {
sequence
.then(function (next) {
db.query('SELECT given FROM books WHERE user_id = ?', [user.userId], function (err2, result) {
if (err2) throw err2;
next(err, result);
});
})
.then(function (next, err, books) {
db.query('SELECT received FROM encycs WHERE user_id = ?', [user.userId], function (err3, result2) {
if (err3) throw err3;
next(err, result2, books);
});
})
.then(function (next, err, books, encycs) {
Calculation(books, encycs, function (cb) {
totalresult.push(cb);
});
next();
});
});
setTimeout(function() {
console.log(totalresult); // output ok.
return callback(totalresult); // returning as expected
}, 2000);
}
私はtotalresult.lengthとは何か分かりません。だから私は長さを確認することはできません。
3番目の.then文に達していないか確認してください。そうでない場合は、チェックする必要があります。 – QuestionAndAnswer
私は理解しませんでした。 .thenステートメントに到達する方法のミニサンプルを表示できますか? – user3325207
あなたは3つの事例を持っています。 * books *を最初に選択し、* enycycs *を2番目に選択し、3番目のステートメントが何らかの計算を実行し、結果がtotalresult配列にプッシュされます。私が見る限りでは、これがあなたが住んでいる唯一の場所です。次にチェックするべきことは、コールバックの成功分岐のどこにでもtotalresult配列を返しているわけではなく、エラーのときだけです。実際に配列に値を設定するかどうかを確認してください。正しく表示されていれば返すわけではありませんので、必要なときにいつでも返すようにしてください。 – QuestionAndAnswer