2017-10-15 24 views
0

.mapメソッド内で非同期メソッドを呼び出す方法を理解する上で助けが必要です。私は、すべての非同期メソッドが完了するまで待つ必要があり、非同期メソッドが変更された値を使用します。Promise.map内の非同期メソッド

私のコードは、すぐにイテレータがそのタスクを完了すると呼ばれている上記の場合マップのその機能で

//declared during init 
var Promise = require("bluebird"); 

Promise.map(objectArray, function (item) { 

    mongoDB.findOne({ 
     itemId=item.id 
    }) 
     .then(function (result) { 
      item.set({newValue:result.foo}); 
      return item.toObject(); 
     }) 
     .catch(function (err) { 

     }); 
}).then(function (modifiedObjectArray) { 
    return res.status(200).send(modifiedObjectArray); 
}); 

以下の通りです。すべてのDBタスクが完了するまでどのように待つのですか?

答えて

1

あなたのコールバックからの約束を返す必要があります:勤務

Promise.map(objectArray, function (item) { 
    return mongoDB 
     .findOne({itemId: item.id}) 
     .then(function (result) { 
      item.set({newValue: result.foo}); 
      return item.toObject(); 
     }) 
     .catch(function (err) { 

     }); 
}).then(function (modifiedObjectArray) { 
    return res.status(200).send(modifiedObjectArray); 
}); 
+0

:)。 "約束"の概念にまったく新しい..マップ内に2つの返品があることは全く知らなかった –

+0

'マップ内に2つの返品があることは知りませんでした。 –

関連する問題