我有一个调用函数的代码,如下所示:
this.getAllOptions(questionID);
console.log("++++++++++++++++++++++++++++++++");
console.log(this.result);
Run Code Online (Sandbox Code Playgroud)
该函数非常简单,它调用一个返回对象数组的服务。从返回的数据来看,我只需要字符串格式的“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;
});
});
}
Run Code Online (Sandbox Code Playgroud)
但问题是,调用函数“getAllOptions()”之后的代码首先被执行。我希望调用方法后的代码等待函数完成执行。
那可能吗?
您需要等待数据到达。在调用getOptionsQuestion完成后,创建的可观察对象getOptionsQuestion尚未收到任何数据,因此您传递给的回调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);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
28584 次 |
| 最近记录: |