【问题标题】:async not waiting for await in callback to finish异步不等待回调中的等待完成
【发布时间】:2019-02-07 00:52:10
【问题描述】:
我仍然是 async 和 awaits 的新手,但这就是我的工作。
async function _getImageURLs(folder) {
if (!id) return;
foo.AWSS3Helper.GetImageUrls(so, function (imageUrls) {
return await imageUrls;
});
}
函数 _getImageURLs() 仍在返回,无需等待 AWSS3Helper.GetImageUrls 完成。我猜这与在回调函数中有关。回调是否也需要异步?
【问题讨论】:
标签:
javascript
callback
async-await
【解决方案1】:
在函数上使用 await 而不是在 return 语句上
async function _getImageURLs(folder) {
if (!id) return;
foo.AWSS3Helper.GetImageUrls(so, await function (imageUrls) {
return imageUrls;
});
}
【解决方案2】:
据我所知,这里没有任何承诺,您在 api 上有一个基于回调的机制,因此使用 async/await 似乎毫无意义
您应该将回调传递给方法并在获得结果后立即调用它
function _getImageURLs(folder, callback) {
if (!id) callback();
foo.AWSS3Helper.GetImageUrls(so, function (imageUrls) {
callback(imageUrls);
});
}
_getImageURLs("somefolder", function(result) {
console.log(result);
// do whatever you want here with the result
};
【解决方案3】:
用 observables 试试。像这样的……
function _getImageURLs(folder) {
if (!id) return;
const imageUrlObservable = of(foo.AWSS3Helper
.GetImageUrls(so, function (imageUrls) {
return imageUrls;
})
);
imageUrlObservable.subscribe({
next(imageUrL) { console.log(imageUrL) },
complete() { console.log('Finished sequence'); }
});
}