如何在node.js的async.parallel中创建for循环
我有一个如下的代码片段如何在node.js的async.parallel中创建for循环,node.js,asynchronous,Node.js,Asynchronous,我有一个如下的代码片段 async.parallel({ foo: function(call) { request.get('...?node=foo', function (error, response, body) { var last=JSON.parse(body); call(null,last.data.result); }); }, bar: function(call) { r
async.parallel({
foo: function(call) {
request.get('...?node=foo', function (error, response, body) {
var last=JSON.parse(body);
call(null,last.data.result);
});
},
bar: function(call) {
request.get('...node=bar', function (error, response, body) {
var last=JSON.parse(body);
call(null,last.data.result);
});
}
}, function(err, results) {
callback(results)
});
var node = ['foo', 'bar'];
async.parallel({
for (var i = 0; i < node.length; i++) {
node[i]: function(call) {
request.get('...?node=' + node[i] + '', function(error, response, body) {
var last = JSON.parse(body);
call(null, last.data.result);
});
}
}
}, function(err, results) {
callback(results)
});
但我想把它循环…也就是说,像下面这样
async.parallel({
foo: function(call) {
request.get('...?node=foo', function (error, response, body) {
var last=JSON.parse(body);
call(null,last.data.result);
});
},
bar: function(call) {
request.get('...node=bar', function (error, response, body) {
var last=JSON.parse(body);
call(null,last.data.result);
});
}
}, function(err, results) {
callback(results)
});
var node = ['foo', 'bar'];
async.parallel({
for (var i = 0; i < node.length; i++) {
node[i]: function(call) {
request.get('...?node=' + node[i] + '', function(error, response, body) {
var last = JSON.parse(body);
call(null, last.data.result);
});
}
}
}, function(err, results) {
callback(results)
});
var节点=['foo','bar'];
异步并行({
对于(变量i=0;i
它不起作用…怎么做?
你能帮我吗?你有两个选择之一。一个是阅读文档,这将是使用
async
的更规范的方法
看起来是这样的:
async.map(['foo', 'bar'], function (node, callback) {
request.get('...?node=' + encodeURIComponent(node), function (error, response, body) {
if (error) return callback(error)
var last = JSON.parse(body)
callback(null, last.data.results)
})
}, function (error, results) {
// handle error
callback(results)
})
您的第二个选择是使用同步,完全删除对async
的依赖,尽管您可能需要类似polyfill的,直到承诺在更大比例的浏览器中使用为止
以下是如何使用本机承诺实现后一种解决方案:
Promise.all(['foo', 'bar'].map(function (node) {
return new Promise(function (resolve, reject) {
request.get('...?node=' + encodeURIComponent(node), function (error, response, body) {
if (error) return reject(error)
var last = JSON.parse(body)
resolve(last.data.result)
})
})
})).then(function (results) {
callback(results)
}).catch(function (error) {
// handle error
})