如何防止在打字稿中调用第一种方法之前调用第二种方法?
How to prevent second method getting called before first method called in typescript?
我需要在 API 调用后调用一个方法。我写了这样的代码
getData(): void {
this.apiCall();
this.processAPIData();
}
只有在 apiCall()
完成并且 return 响应成功或为真后,才应调用 processAPIData()
方法。在某些情况下,apiCall()
花费更多时间来 return 响应,并且 processAPIData(
) 在 apiCall()
完成之前被调用。这在功能上几乎没有问题。我曾尝试将 setTimeout()
用于 processAPIData()
,但 apiCall()
可能需要比 setTimeout 中提到的时间段更长的时间。
由于具体的要求和条件,我不想在apiCall()
的正文中写processAPIData()
。那么有人可以帮助我解决这个问题吗?
编辑:由于你们中的一些人询问了 apiCall() 结构,我添加了它的示例结构。
apiCall(): void
{
this.getAPIData().subscribe((response) => {
this.dataToBeProcessed = response.data;
});
}
您可以将 getData 函数声明为 async 并在 apiCall 中使用 await。
async getData() {
await this.apiCall();
this.processAPIData();
}
这是一个 js 功能。
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function
使用异步函数和 Promises 可以实现您想要实现的目标。
首先,您需要使 this.apiCall
成为一个异步函数。这确保它 returns 是一个承诺,您可以等待它。
async apiCall() {
const res = await this.getAPIData().toPromise()
this.dataToBeProcessed = res.data
}
为了能够等待 apiCall
的结果,您还需要使 getData
异步:
async getData() {
await this.apiCall()
this.processAPIData()
}
编辑:使用 OP
提供的新信息
我需要在 API 调用后调用一个方法。我写了这样的代码
getData(): void {
this.apiCall();
this.processAPIData();
}
只有在 apiCall()
完成并且 return 响应成功或为真后,才应调用 processAPIData()
方法。在某些情况下,apiCall()
花费更多时间来 return 响应,并且 processAPIData(
) 在 apiCall()
完成之前被调用。这在功能上几乎没有问题。我曾尝试将 setTimeout()
用于 processAPIData()
,但 apiCall()
可能需要比 setTimeout 中提到的时间段更长的时间。
由于具体的要求和条件,我不想在apiCall()
的正文中写processAPIData()
。那么有人可以帮助我解决这个问题吗?
编辑:由于你们中的一些人询问了 apiCall() 结构,我添加了它的示例结构。
apiCall(): void
{
this.getAPIData().subscribe((response) => {
this.dataToBeProcessed = response.data;
});
}
您可以将 getData 函数声明为 async 并在 apiCall 中使用 await。
async getData() {
await this.apiCall();
this.processAPIData();
}
这是一个 js 功能。
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function
使用异步函数和 Promises 可以实现您想要实现的目标。
首先,您需要使 this.apiCall
成为一个异步函数。这确保它 returns 是一个承诺,您可以等待它。
async apiCall() {
const res = await this.getAPIData().toPromise()
this.dataToBeProcessed = res.data
}
为了能够等待 apiCall
的结果,您还需要使 getData
异步:
async getData() {
await this.apiCall()
this.processAPIData()
}
编辑:使用 OP
提供的新信息