Promise.map在继续执行.then()之前不等待parsing。

我试图把自己的想法包括在JavaScript的承诺之中, 这是我最近的挫折感:

var rp = require('request-promise'); function process1000() { //gets 1000 objects from DB to process get1000objects() .then(function (docs) { Promise.map(docs, addApiData) }) .then(function (objects) { console.log(objects) }) } function addApiData(element) { return rp(url).then(function (res) { resolve(res); }) .catch(console.error); } 

当在addApiData()中调用rp(url)时,它不会等待函数parsing,然后再开始传递给process1000()中的Promise.map数组中的下一个项目。 只要在addApiData中调用rp(url),就会在数组中的下一个项目上调用addApiData。 然后在process1000中的第二个.then()函数被提前调用,所有事情都有机会在Promise.map中parsing。 我已经尝试了几个不同的库来使我的GET请求,但他们都有这个相同的问题。 我在这里做错了什么? 任何帮助将不胜感激。

我想你正在寻找更像这样的东西:

 var rp = require('request-promise'); function process1000() { //gets 1000 objects from DB to process get1000objects() .then(function (docs) { return Promise.map(docs, addApiData) }) .then(function (objects) { console.log(objects); }) } function addApiData(element) { return rp(url) .catch(console.error); } 

这里的主要观点是,你需要确保你回复的承诺,否则下一个将不知道如何处理它的价值。

另外,尝试避免Promise构造函数反模式 。

换句话说,如果你还有一个承诺,那么你也不需要回来。

这两个是等价的:

 return rp(url).then(function(res) { return res; }); // and return rp(url); 

它们都返回一个promise( rp(url)返回一个promise,而rp(url).then( /* ... */)返回一个promise。