Angular/TypeScript - 在另一个函数完成后调用一个函数

标签 angular typescript asynchronous promise synchronous

我想在 f1 完成后调用 f2f1 函数可以是同步异步。我需要一个在这两种情况下都适用的示例。我找到了一个解决方案,使用 Promise 和一个计时器:

global() {
    this.f1().then(res => {
        this.f2()
    })
}

f1() {
    return new Promise<any>((resolve, reject) => {

        // Some code...

        setTimeout( () => {
            resolve(x);
        }, 1500);
    });
}

f2() {
    // Some code...
}

问题是程序总是要等待 1500 毫秒。我不希望 f2f1 完成之前开始。 有没有办法等待所需的时间,而不是更多或更少?

最佳答案

所以去掉setTimeout部分。它将调用 resolvereject,然后将执行传递给下一个 thencatch 处理程序。如果您在 Promise 中有一些异步调用,则需要在该调用的结果中调用 resolve/reject

如果不等待 1500ms - 给定的时间实际上是可以调用该函数的最短时间。可能在2000ms之后这个和JS代码运行的主线程有关。如果主线程没有工作要做,那么异步调用的结果将被执行。

function f1() {
    return new Promise((resolve, reject) => {
        console.log('f1');
        resolve();
    });
}

function f2() {
   console.log('f2');
}

f1().then(res => f2());

关于Angular/TypeScript - 在另一个函数完成后调用一个函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48538814/

相关文章:

javascript - 模糊事件未在 IE 中触发 - Angular 2+

c# - ASP.NET Core Angular 7 Http Post-需要复杂对象吗?

javascript - 如何从原始 HTML 响应中删除某些元素类型?

ios - swift shouldPerformSegueWithIdentifier 异步获取数据

C# 进程无法访问文件,因为该文件正在被另一个进程使用

angular2-jwt.d.ts 给出 "Cannot find module ' @angular/http"错误

javascript - 错误 TS2356 表示数字类型变量必须是类型 'number' 的算术操作数

typescript - EntityMetadataNotFound : No metadata for "BusinessApplication" was found

c# - 在 C# 中,当我调用 BeginXXX 时有两个线程

javascript - Angular 4 : invoke method from template