【发布时间】:2017-08-04 15:14:57
【问题描述】:
在返回数据之前等待所有并行异步函数完成的最佳方法是什么?
请求异步工作,下面的函数将返回一个空数组。
import request from 'request'
// List of urls
const urls = [
'http://someurl.com/1.json',
'http://someurl.com/2.json',
'http://someurl.com/3.json',
]
function getData () {
// An array that will contain data
let result = []
// Request data from all urls
urls.forEach(i => {
// Function works asynchronously
request(i, (err, res, body) => {
if(err) throw err
const data = JSON.parse(body)
result.push(i.someValue)
})
})
return result // Returns an empty array :(
}
【问题讨论】:
-
Promise.all() -
你用的是什么请求库?
import request from 'require'没有任何意义 -
@Aron
https://www.npmjs.com/package/request -
@Aron 我的错。对不起。发布固定
-
首先,您不能等待异步响应完成后再返回。有关该问题的所有详细信息,请参阅How do I return the response from an asynchronous call?。
标签: javascript arrays asynchronous request promise