forEach 循环中的订阅调用执行得太晚

哈森·法德拉维

为什么控制台日志最后会显示所有“if”输出?

3 elem :
else
elem :
else
elem :
else
elem :
else
2 elem :
4 if

我期望输出:

elem
if 
elem 
else ...

我认为它会在每个“elem”之后显示“if”或“else”!

这是代码:

res.docs.forEach((elem) => {
    console.log('elem');
    if (elem.productType) {
        this.Service.function(elem.productType._id).subscribe((result) => {
            console.log('if');
            const text = result.name;
            this.marketPlaceList.push(text);
        });
    } else {
        console.log('else');
        this.marketPlaceList.push('');
    }
});
特里科特

由于 observable 异步发出事件,您的forEach循环将在.subscribe执行任何回调之前完成

您可以通过将 observable 转换为 promise 并对其进行await-ing来解决此问题。为了await工作,您需要一个async函数,因此将您的代码包装到这样的函数中,并将forEach循环更改for循环:

(async () => { // Async wrapper
    for (const elem of res.docs) { // Use for-loop
        console.log('elem');
        if (elem.productType) {
            // Convert observable to promise, and await
            const result = await this.Service.function(elem.productType._id).toPromise();
            console.log('if');
            const text = result.name;
            this.marketPlaceList.push(text);
        } else {
            console.log('else');
            this.marketPlaceList.push('');
        }
    }
)(); // execute immediately 

当您需要完全填充数组时,请确保也等待最外层的async函数(或then在其上使用this.marketPlaceList

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

ForEach循环中的调用函数

来自分类Dev

如何使类在forEach循环中可执行?

来自分类Dev

Click()-不在我的foreach循环中执行

来自分类Dev

SwiftUI:无法在ForEach循环中调用.frame

来自分类Dev

不会从foreach循环中调用SwiftUI .onTapGesture

来自分类Dev

在angularjs的foreach循环中调用api

来自分类Dev

在 forEach 循环中加载 ajax 调用

来自分类Dev

Powershell-从两个变量的ForEach循环中调用唯一值以执行PowerCLI命令

来自分类Dev

forEach循环中的setTimeout

来自分类Dev

foreach循环中的条件

来自分类Dev

在foreach()循环中中断if

来自分类Dev

在foreach循环中的mail()

来自分类Dev

foreach循环中的数组

来自分类Dev

正确使用foreach循环中的foreach循环

来自分类Dev

正确使用foreach循环中的foreach循环

来自分类Dev

while循环中的foreach循环

来自分类Dev

在foreach循环中通过Ajax加载内容后执行代码

来自分类Dev

如何在nodejs的foreach循环中编写顺序执行?

来自分类Dev

PHP - if 和 else 条件都在 foreach 循环中执行

来自分类Dev

Angular 2+,带有嵌套的对象的已订阅数组在forEach循环中订阅

来自分类Dev

在C#中,每个循环中的foreach调用方法吗?

来自分类Dev

在foreach循环中加快WebClient调用的速度

来自分类Dev

在 .forEach() 循环中调用唯一的随机值

来自分类Dev

在foreach循环中返回Array

来自分类Dev

在foreach循环中创建任务

来自分类Dev

在foreach循环中修改集合

来自分类Dev

在foreach dopar循环中绘制

来自分类Dev

在forEach循环中设置属性

来自分类Dev

foreach:for循环中的grep backtick