我想使用async/await实现最快回来的请求数据最快处理

我现在要请求多个地方的数据并把数据渲染在页面上,希望最快到的数据最快显示在页面上
之前是用promise写的

urls.map(function(url) {
    request(url).then(function(data) {
      render(data);
    })
})

现在希望改用async/await写,看了网上资料时发现都实现不了

var datas = await Promise.all(urls.map(function(url){
    return request(url);
}))
这个我得等数据都回来后才可以显示页面
 var promises = urls.map(function (url) {
    return request(promises);
})
 for(var i =0; i < promises .length;i++) {
   let data = await promises 
   render(data)
}
这个是第一个请求最早处理,我获取不了最快的那个

为了获取最快那个我改成这样的

 var promises = urls.map(function (url) {
    return request(promises);
})
 for(var i =0; i < promises .length;i++) {
   let data = await promises.then(function(data) {
   render(data)
})
   
}

但是这样写还是摆脱不了then,和用promise写没啥区别,还有别的方法不

阅读 2.4k
1 个回答

供参考

如果是拿到第一个后扔掉其它的

async function fn () {
  // ....
  render(await Promise.race(urls.map(request)))
}

如果是都渲染

urls.forEach(async url => render(await request(url)))
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题