我需要处理一些数据。我可以像这样同步和异步方式(简化):
同步方式:
for (var i in input) {
result += input[i]
}
异步方式
function f(input,cb) {
var result;
if (!input) {
setTimeout(function() {cb(result)},500);
} else {
f(input.slice(1),function(r) {
result+=input[0];
});
}
}
是否可以使用生成器重写异步代码?我希望我有一些For循环代码而不是递归。
答案 0 :(得分:0)
使用await(更新的ES2017技术built on generators in ES6),并假设,正如您所说:
['apple', 'peach', 'banana']
).then()
(如果您使用的是节点7+或当前浏览器,这是一个好主意)然后:
var doThing = async function (input) {
return new Promise(function(resolve, reject) {
setTimeout(function(){
resolve(`Result for ${input}`)
}, 2000);
});
}
var start = async function(listOfThings){
var result = await Promise.all(listOfThings.map(doThing))
console.log('All done', result)
}
start(['apple', 'peach', 'banana'])
将返回:
All done [ 'Result for apple', 'Result for peach', 'Result for banana' ]
要从网络获取一些数据,您只需将setTimeout
替换为superagent
或(如果您要编写自己的查询字符串编码,URL处理等){{1} }。