【发布时间】:2019-02-09 08:20:20
【问题描述】:
我有一个迭代文件列表的函数,然后对于每个文件,它调用一个异步方法,该方法执行一些图像操作,然后将图像推送到一个数组。
问题是异步调用同时发生,因此它锁定了 UI。所以我想遍历列表,但只在前一个完成时调用该函数。
Array.from(files).forEach(data => {
if (data.size > 5000000) {
this.toastr_service.error('FILE ' + data.name + ' EXCEEDS FILE SIZE LIMIT (5MB)');
}else {
this.asyncFunc(data).subscribe(result => {
this._photos.push(result);
}, error => {
console.log(error);
});
}
});
【问题讨论】:
-
请发布您的代码和(/或)minimal reproducible example 重现您的问题
-
为什么不链接请求?
-
使用 RxJS - 它可以很好地处理异步代码
-
正如@mast3rd3mon 明智地建议的那样,您可能应该链接请求。由于您的应用程序似乎不能同步工作,因此您应该使用 fork join 进行链接。编辑:另外,不要忘记。 subscribe 方法还有一个“done”回调,您可以在其中应用仅应在成功完成任务时执行的逻辑。
-
@tricheriche 我已经添加了代码
标签: angular typescript asynchronous