forEachループでfree/sandbox mongolab dbインスタンスに複数の呼び出しを実行しようとしていて、同じ応答を返すと応答が返されます)第二の送信は動作します:ここにmongolabへの複数の非同期呼び出しの実行が失敗しました
は私のforEachです:
router.get('/api/dashboard', function(req, res){
var users = cacheAgent.get('users');
var stats = { balance: [] };
users.asArray.forEach(function(user){
getUserBalance(user.id, function(userBalance){
stats.balance.push({ id: user.id, name: user.name, balance: userBalance.balance });
if (stats.balance.length == users.asArray.length){
res.json({users: users, stats:stats});
}
});
});
});
そして、実際の機能:
var getUserBalance = function(userId, callbackFn){
console.log('getting balance for user: ' + userId);
Record.aggregate([
{ $unwind: '$action'},
...
], function(err, result){
//console.log({ balance: result[0], error: err });
callbackFn({ balance: result[0].userTotal });
});
}
私はリクエストに応じて、単一のgetUserBalanceを実行し、私は例えば、何の問題を取得していない他の後にそのURL 1を呼び出す場合:、その該当する場合
router.get("/api/getbalance/:id",function(req,res){
var userId = req.params.id;
getUserBalance(req.params.id, function(result){res.json(result)});
});
わからないが、クエリはMongoの集計関数であり、それも作品の前に働いていた単一の呼び出しをしませ押しつぶすた後、私はあなたがおそらくあなたの集計クエリでの動作中に$を実行することによって、これを達成することができます任意の助け
ありがとうスチュアート、それは良い考えです、私は流れを変更します。 私はまだこの問題を引き起こしたのでしょうか?そのような問題は解決できないはるかに複雑なケースで後で発生するかもしれません:) しかし、この問題は解決します。 – OfirYaron
問題ありません!私はあなたが問題を抱えている理由は、JavaScriptがシングルスレッドであるためだと思います。続行する前に完了したforループの各繰り返しを伝える必要があります。詳細な説明については、この回答をご覧ください: http://stackoverflow.com/questions/26176957/looping-array-and-checking-mongodb-collection-in-loop-async –