【发布时间】:2015-08-06 12:32:34
【问题描述】:
我有超过 500,000 个 URL 存储在集合(users2)中,例如
{
"_id" : ObjectId("55c0ae729a9109fc1af36680"),
"application_url" : "http://example.com/"
},
{
"_id" : ObjectId("55c0ae729a9109fc1af36685"),
"application_url" : "http://example.com/"
}
.....
Node JS 服务器必须获取每个文档的“application_url”来更改它并在发出请求之前生成一个新的 url。 它必须按顺序这样做,并且必须等待每个响应才能移动到下一个 URL(当将发出新请求时)。 最终结果(恰好是 JSON)需要存储在一个集合中。
var Promise = require("bluebird");
var request = Promise.promisify(require("request"));
exports.getDetails=function (req,res){
console.log("getDetails");
var sequence = Promise.resolve();
req.db.Users2.find({},{application_url:1,_id:0}).exec().then(function(result) {
return result.reduce(function(sequence, applicationUrl) {
return sequence.then(function() {
//return applicationUrl;
//console.log(applicationUrl.application_url);
actualUrl = applicationUrl.application_url;
console.log("actualUrl::"+actualUrl);
var splitUrl = actualUrl.toString().split('/');
var splitid = (splitUrl[5]+"").split('?');
var getId = splitid[0];
var id = getId.substring(2);
var newUrl = splitUrl[0]+'//'+splitUrl[2]+'/'+'lookup?id='+id;
//console.log("newUrl::"+newUrl);
return newUrl;
}).then(function(newUrl) {
console.log("newUrl::"+newUrl);
request(newUrl).then(function(response,body){
console.log(JSON.stringify(response));
})
});
}, Promise.resolve());
}).then(function() {
console.log("Done");
}).catch(function(err) {
console.log("Error");
})
}
我可以一直工作到新的 url 生成,但不知道如何在使用 Promise 移动到下一个 url 之前发出请求等到收到响应。
【问题讨论】: