Bluebird Promise.all 没有被调用
Bluebird Promise.all doesn't get called
我有一个 url,其中 returns 是其他 url 的列表
对于每个 url,我想做一些事情然后使用 Promise.all 告诉我它完成了。
出于某种原因,它确实处理了所有 url,但 Promise.all
似乎没有被称为 (Bluebird)
我做错了什么?
var rp = require("request-promise");
var Promise = require("bluebird");
var promrequests = [];
rp(
{
url: url_of_list_of_urls,
json: true,
},
function(error, response, body) {
if (!error && response.statusCode === 200) {
let urls = [];
for (var i in body) {
urls.push(body[i]);
}
for (let j in urls) {
let url = urls[j];
promrequests.push(
rp(
{ url: url, followAllRedirects: true },
function(error, response, body) {
console.log("working on " + url);
// do stuff
}
)
);
}
Promise.all(promrequests).then(function() {
console.log("finished all");
});
}
}
);
不需要使用请求承诺库的回调,示例代码是原始请求回调 API 和请求承诺 API.
的混合体
Bluebird 还有一个 .map
帮助程序,可以更轻松地处理数组。
在整个链中删除所有回调并返回 promises 会给你类似(未测试)的结果:
requestOptionsUrls = {
url: url_of_list_of_urls,
json: true,
}
rp(requestOptionsUrls).then(function(urls){
return Promise.map(urls, function(url){
return rp({ url: url, followAllRedirects: true })
.then(function(body){
console.log("working on " + url);
// work
})
})
})
.then(function(){
console.log("finished all");
})
.catch(function(error){
console.error(error)
})
request-promise 将为您进行 2XX 检查,除非您设置 simple
request option to false
。
它也只解析请求的 body
除非你将 resolveWithFullResponse
设置为 true
,比如你是否想对响应的状态代码进行更复杂的检查.
我有一个 url,其中 returns 是其他 url 的列表 对于每个 url,我想做一些事情然后使用 Promise.all 告诉我它完成了。
出于某种原因,它确实处理了所有 url,但 Promise.all
似乎没有被称为 (Bluebird)
我做错了什么?
var rp = require("request-promise");
var Promise = require("bluebird");
var promrequests = [];
rp(
{
url: url_of_list_of_urls,
json: true,
},
function(error, response, body) {
if (!error && response.statusCode === 200) {
let urls = [];
for (var i in body) {
urls.push(body[i]);
}
for (let j in urls) {
let url = urls[j];
promrequests.push(
rp(
{ url: url, followAllRedirects: true },
function(error, response, body) {
console.log("working on " + url);
// do stuff
}
)
);
}
Promise.all(promrequests).then(function() {
console.log("finished all");
});
}
}
);
不需要使用请求承诺库的回调,示例代码是原始请求回调 API 和请求承诺 API.
的混合体Bluebird 还有一个 .map
帮助程序,可以更轻松地处理数组。
在整个链中删除所有回调并返回 promises 会给你类似(未测试)的结果:
requestOptionsUrls = {
url: url_of_list_of_urls,
json: true,
}
rp(requestOptionsUrls).then(function(urls){
return Promise.map(urls, function(url){
return rp({ url: url, followAllRedirects: true })
.then(function(body){
console.log("working on " + url);
// work
})
})
})
.then(function(){
console.log("finished all");
})
.catch(function(error){
console.error(error)
})
request-promise 将为您进行 2XX 检查,除非您设置 simple
request option to false
。
它也只解析请求的 body
除非你将 resolveWithFullResponse
设置为 true
,比如你是否想对响应的状态代码进行更复杂的检查.