angular - Angular/ typescript 中的顺序代码执行

标签 angular typescript

如何让我的代码按顺序运行?例如,

  1. 如果我有一个从服务获取一些数据的 for 循环,我希望 n+1 迭代仅在 nth 迭代完成后运行.

  2. 我希望循环后的代码仅在 for 循环完成所有交互后才执行。

Example code:

someMethod() {

    for ( var i = 0; i < someLength; i++) {
        // get some data
        this.dataService.get(i).subscribe(data => {
            // do something with the data
        }); 
    }

    // 
    console.log ('print me only after all iterations');

    // ....
    // some more lines of code
}

Here is another example ( Plunker ) :

someMethod() {

    for ( var i = 0; i < 5; i++) {
        setTimeout(()=> {
            console.log('This is iteration' + i); 
        },500);
    }

    // I want to execute this line of code only after the 
    // for loop has completed all iterations. 
    console.log ('print me only after all iterations');

    // ....
    // some more lines of code
}

有什么想法吗?

最佳答案

您可以将每个迭代包装在一个 Promise 中并等待它:

async function someMethod() {
    for (var i = 0; i < 5; i++) {
        await new Promise(resolve => {
            setTimeout(()=> {
                console.log('This is iteration ' + i); 
                resolve();
            }, 500);
        });
    }
    console.log ('print me only after all iterations');
}
someMethod();

关于angular - Angular/ typescript 中的顺序代码执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45649315/

相关文章:

javascript - 将 Angular 4 升级到 5 后,Api 无法工作并抛出控制台错误

javascript - 如何在 Angular2 中取消订阅

javascript - 如何从目录加载随机文件

typescript - 动态类型保护功能

javascript - 为什么 instanceof 在 Javascript 中为子对象返回 false

angular - 在页面之间导航时未调用 ngAfterViewInit

javascript - javascript中的Angular2递归模板

javascript - 输入类型 ="number"包含 null 而不是字符

javascript - NestJS 在非模块文件中注入(inject)模块服务

intellij-idea - 自动引用intelliJ下载的d.ts文件