javascript - 如何强制一段代码等待 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 调用完成之前仍然能够运行,这只是应该等待的那一行。
解决方案
这就是 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
关键字的方法,但我不是这个概念的专家,所以我会让其他人回答这个问题。
推荐阅读
- amazon-web-services - 具有 IAM 权限的 Cognito 组
- matlab - 保存 Matlab 对象实例会导致无限循环
- javascript - Bootbox not 不显示弹出模式
- maven - “mvn test”不会将 src/test/resources 的内容复制到输出目录?
- mapbox-gl-js - 是否可以动态添加到 kepler.gl 中的数据集
- r - 如何在条形图(ggplot)中的条形组之间添加空间
- sql - 将查询运行日期和总数保存在 HANA 数据库中的存储过程 - 每天早上 6:30 运行
- python - 为什么 concurrent.futures.ThreadPoolExecutor().submit 不立即返回?
- webpack - Webpack 开发服务器缓存清除
- javascript - 仅操作二维数组的数值