首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用生成器的异步js代码

使用生成器的异步js代码
EN

Stack Overflow用户
提问于 2017-06-08 15:22:47
回答 1查看 72关注 0票数 2

我需要处理一些数据。我可以同步和异步地这样做(简化):

  1. 同步方式: 用于(var I in input) { += inputi }
  2. 异步方式 函数f(input,cb) { var结果;if (!input) {setTimeout(函数(){cb(结果)},500);}{ f(input.slice(1),函数(R){ result+=input;});}}

是否可以使用生成器重写异步代码?我希望我有一些For循环代码,而不是递归。

EN

回答 1

Stack Overflow用户

发布于 2017-06-08 15:57:42

使用等待 (一种较新的ES2017技术,即建立在ES6的发电机上),并假设,正如您所说的:

  • 您有多个项(在本例中为['apple', 'peach', 'banana'])
  • 您希望对它们执行一些异步操作。
  • 您希望避免回调和.then() (如果使用节点7+或当前浏览器,这是个好主意)

然后:

代码语言:javascript
复制
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'])

将返回:

代码语言:javascript
复制
All done [ 'Result for apple', 'Result for peach', 'Result for banana' ]

要从网络中获取一些数据,只需将setTimeout替换为superagent,或者(如果您想编写自己的查询字符串编码、URL处理等) fetch

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44439745

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档