gpt4 book ai didi

typescript 。等待代码执行,直到函数完成执行

转载 作者:行者123 更新时间:2023-12-03 23:56:21 24 4
gpt4 key购买 nike

我有一个调用函数的代码,如下所示:

this.getAllOptions(questionID);
console.log("++++++++++++++++++++++++++++++++");
console.log(this.result);

该函数非常简单,它调用一个返回对象数组的服务。从返回的数据来看,我只需要字符串格式的“item.Content”,如下图。
result: string;
getAllOptions(question_ID){

this.result = "";

this._service.getOptionsQuestion(question_ID)
.subscribe( data => {
data.forEach(item => {
console.log(item.Content);
this.result += item.Content;
});
});
}

但问题是,调用函数“getAllOptions()”后的代码首先被执行。我希望调用方法后的代码等待函数完成执行。

那可能吗?

最佳答案

您需要等待数据到达。立即调用 getOptionsQuestion完成在 getOptionsQuestion 中创建的 observable尚未收到任何数据,因此您传递给 subscribe 的回调还没有被调用。

有几种方法可以等待数据,我个人更喜欢 Typescript 中的 async/await 语法,使代码更具可读性:

import 'rxjs/add/operator/toPromise';
import 'rxjs/add/operator/map';
import * as rsx from 'rxjs'

class Test {
// Dummy service decalration
_service : {
getOptionsQuestion(nr: number): rsx.Observable<Array<{Content : string }>>
}

result: string;
async getAllOptions(question_ID: number){

this.result = "";
const data = await this._service.getOptionsQuestion(question_ID).toPromise()

data.forEach(item => {
console.log(item.Content);
this.result += item.Content;
});
}
async otherMethod (questionID : number){
await this.getAllOptions(questionID);
console.log("++++++++++++++++++++++++++++++++");
console.log(this.result);
}
}

关于 typescript 。等待代码执行,直到函数完成执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46087026/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com