首页 > 解决方案 > 如何强制一段代码等待 Typescript 中的 API 调用完成?

问题描述

我正在进行 API 调用,并希望调用后的代码在 API 调用完成之前不运行。

我有一个函数 ,this.api_call它调用 API 并returnValue在 API 调用完成后返回一个数组 。

let returnValue = this.api_call(data);

//This line should not run until returnValue has been set
this.otherFunction(returnValue[0], returnValue[1]);

我怎样才能让那一行在运行前等待?我希望其他代码在 API 调用完成之前仍然能够运行,这只是应该等待的那一行。

标签: javascripttypescriptapiasynchronous

解决方案


这就是 Promise 的用武之地,如果你的函数this.api_call(data)返回一个 Promise,那么你可以then在其上调用该函数,并带有回调,并且此回调将仅在 Promise 解决后运行。

this.api_call(data).then((returnValue) => {
    this.otherFunction(returnValue[0], returnValue[1]);
});

您还可以使用RxJS 的 observable,它允许您在使用pipe函数返回数据之前更改数据。如果您使用的是 observable,请确保您使用 observable,subscribe否则它将永远不会被解雇。
如果你的this.api_call(data)函数返回一个 observable(如果你使用 Angular,通常是这种情况),像这样使用它:

this.api_call(data).subscribe((returnValue) => {
    this.otherFunction(returnValue[0], returnValue[1]);
});

还有一种使用async /await关键字的方法,但我不是这个概念的专家,所以我会让其他人回答这个问题。


推荐阅读