2016-09-05 5 views
1

データベースに複数回保存すると、res.send(people.json)が必要になります。私は "then"を試してみて、 "call"を試みました。私はこの権利をしているのかどうか分からない...それはアプリを壊し続けているので。それぞれの後に何かを起こさせるにはどうすればいいですか?forEachが配列を反復処理した後に応答を送信する(コールバックを使用する)

people.forEach(saveRequest).call(res.json(people)); // TypeError: Cannot read property 'call' of undefined 

people.forEach(saveRequest).then(res.json(people)); // TypeError: Cannot read property 'then' of undefined 
+0

あなたの条件ものです。 – brk

+0

おそらく、私たちは['Array.prototype.forEach()'](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach)について話しています。もしそうなら: 'people.forEach(saveRequest); res.json(people);' – Makyen

+0

foreachが終了するのを待ちますか?ありがとうございます –

答えて

3

おそらく、我々は約Array.prototype.forEach()について話している。そうならば、次のようにres.json(people)people.forEach(saveRequest);後の完了を実行します:

people.forEach(saveRequest); 
res.json(people); 

Array.prototype.forEach()は同期ですが、機能saveRequestは、してもしなくてもよい、同期することがあります。あなたが質問で提供した情報で、私たちが知る方法はありません。 saveRequestが同期の場合、saveRequestが実行され、peopleアレイの各値で完了した後にres.json(people)が実行されます。 saveRequestが非同期の場合、peopleアレイの各値に対して非同期操作が開始されますが、すべての操作がres.json(people)までに完了することはありません。 saveRequestが非同期の場合、すべての操作が完了した後にres.json(people)を実行する方法をお勧めするための質問には、十分な情報がありません。

0

saveRequestは非同期であり、人と満たされた約束を返すと仮定すると、Promise.allを使用します。

Promise.all(people.map(saveRequest)) 
    .then(people => res.json(people)) 
+1

'saveRequest'がasync *であり、約束を返すと仮定します* –

関連する問題