所以我有以下代码。此代码必须创建3个图形,但仅创建1(最后):
for (var b=0; b<routers.length; b++)
{
for (var a=0; a<rout.length; a++)
{
if(something==something)
{
console.log("bla bla");
var options = {
host: 'xxx',
path: '/xxxxx
port: 'xxxx'}
http.request(options).end();
http.get(options, function (response) {
response.setEncoding('utf8')
response.on('data', function (data) {
var responseArray = JSON.parse(data);
console.log("we get data. we create graph!!!"
})
})
}
}
}
因此,如果我运行脚本,我会得到第一个3x“bla bla”然后在这3x“我们得到数据之后。我们创建图表!!!”。我认为在我的情况下它必须是“bla bla”和“我们得到数据。我们创建图表!!!”等等3倍。我对吗??我是node.js的新手,所以请帮助我。
答案 0 :(得分:0)
Promise是一个模式,用于执行此操作,而不是唯一的模式。他们是否是最好的模式在社区中受到很多争论。其他选项包括async.js和使用EventEmitter。对于这样的事情,我倾向于喜欢Async.js,但我已经使用了所有三种模式。我也更喜欢request.js到内置的http客户端,因为它更容易使用。
这是使用request.js和async.js的简单示例:
var request = require('request'),
async = require('async');
function iterator(router, next){
var options = {}; // however you build your options argument
request.get(options, function(e, response, data){
if(e) return next(e); // something went wrong with the request
var json = null;
try { json = JSON.parse(data); }
catch (err){ next(err); // handle errors on parsing }
// if you get here, parsing happened just fine.
console.log('parsed this router:');
console.log(json);
next();
});
}
function handleFinalResults(e){
if(e) return console.log('Dangit, ', e.message);
console.log('Successfully got everything');
};
async.each(routers, iterator, handleFinalResults);