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。