【发布时间】:2019-11-07 12:48:57
【问题描述】:
我正在从谷歌地图生成图像。这是一个承诺返回方法,因为我只是循环使用结果并将结果存储到“then”回调内的新数组变量中,但响应存在但它没有显示在浏览器中。
在我的谷歌地图生成图像功能不是承诺返回函数之前,它正在向浏览器发送响应,但它是一个承诺返回函数,因此响应存在但控制器方法没有向浏览器发送响应。
static providerMapImageGenerator(req, res) {
let providerArr = []
ProvidersRepository.getProviderInfoForMapImage()
.then(providers => {
providers.forEach(provider => {
// Generating image against each entr
MapGenerator.getMapImage(
provider.latitude,
provider.longitude,
provider.name,
provider.providerId
)
.then(res => {
// Saving record after each entry
ProviderMap.create({
providerId: provider.providerId,
url: res.Location
})
// Adding new array for response
providerArr.push({
id: provider.providerId,
url: res.Location,
lat: provider.latitude,
long: provider.longitude,
name: provider.name
})
})
.catch(err => console.log(err, "err in generating image"))
})
// Sending final response against all generated entries to user
res.send(providerArr) // this is going blank to the browser
})
.catch(error => {
// Sending error response if fails
res.send(error)
})
}
我需要在浏览器中显示 providerArr 响应。
【问题讨论】:
-
For 循环在继续下一次迭代之前不会等待异步操作完成。使用
Promise.all并传递一组 promise 以等待它们全部完成 -
我该如何解决这个问题?
-
@IsaacVidrine 你能告诉我如何在我当前的代码中添加 promise.all。谢谢。
标签: javascript arrays node.js promise