![](/img/trans.png)
[英]Iterate large number of async calls / results in node.js (using ES6 / async / bluebird / generators)?
[英]async js code using generators
我需要处理一些数据。 我可以像这样(简化)以同步和异步方式进行操作:
同步方式:
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循环代码,而不是递归代码。
使用await (一种基于ES6中的生成器的更新的ES2017技术),并假设,如您所说:
['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处理等) fetch
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.