如何同步执行异步代码 Angular 5

用户3074140

我有一个遍历文件列表的函数,然后对于每个文件,它调用一个异步方法,该方法执行一些图像操作,然后将图像推送到数组。

问题是异步调用同时发生,因此它会锁定 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);
        });
    }
});
用户4676340

使用map数组功能以及 RxJS 的功能forkJoin

forkJoin(Array
  .from(files)
  .map(file => file.size < 5000000 && this.asyncFunc(file) || undefined)
  .filter(value => !!value)
).subscribe(([...responses]) => {
  console.log(responses);
  this._photos.push(...responses);
});

forkJoin将进行所有文件大小低于 5Mb 的调用(mapfilter处理好),一旦所有调用完成,响应将被推送到您的数组中。

编辑如果您希望对呼叫进行排序,请concat改用:

concat(...Array
  .from(files)
  .map(file => file.size < 5000000 && this.asyncFunc(file) || undefined)
  .filter(value => !!value)
).subscribe((...responses) => {
  this._photos.push(...responses);
  console.log(this.photos);
});

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在Angular JS中同步执行代码

来自分类Dev

Angular 5 httpClient 版本的代码

来自分类Dev

如何导入 $sce - Angular 5

来自分类Dev

如何仅在5秒后执行代码?

来自分类Dev

如何清除Angular 5中的路由参数

来自分类Dev

如何在 Angular 5 中渲染 PDF?

来自分类Dev

如何使用 angular 5 进行掩蔽

来自分类Dev

如何使用 Angular 5 读取文件内容?

来自分类Dev

如何正确使用 angular 5 中的 FileSaver?

来自分类Dev

如何在Angular2 / 4/5中实现自定义异步验证器

来自分类Dev

Laravel 5:执行异步任务

来自分类Dev

如何从Angular拦截器执行异步操作?

来自分类Dev

如何在angular js和html5中显示来自javascript对象的特定代码的名称

来自分类Dev

如何在angular js和html5中显示来自javascript对象的特定代码的名称

来自分类Dev

如何在 HTML 代码 Angular 5 中使用 .ts 文件中的 json 翻译键

来自分类Dev

Angular 5 --aot 与 Angular 5 --aot=false

来自分类Dev

如何在Angular中将同步调用设为异步调用?

来自分类Dev

如何用Angular App的异步Indexed-db替换同步本地存储

来自分类Dev

如何运行可能的同步或异步代码?

来自分类Dev

Python:如何使用for循环执行我的代码5次?

来自分类Dev

在执行 ng build --prod 时从 angular 4 升级到 angular 5 时出错

来自分类Dev

如何在 Angular App 的运行时将 ES6 代码转换为 ES5 代码

来自分类Dev

API 数据 Angular 5

来自分类Dev

Angular 5 HttpInterceptor 流程

来自分类Dev

Angular 5 白屏死机

来自分类Dev

Angular 5 模板扩展

来自分类Dev

Angular 5 Laravel 分页

来自分类Dev

Java Selenium 与 Angular 5

来自分类Dev

Angular 5 嵌套返回