打字稿。等待代码执行,直到函数完成执行

use*_*260 5 typescript

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

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()”之后的代码首先被执行。我希望调用方法后的代码等待函数完成执行。

那可能吗?

Tit*_*mir 3

您需要等待数据到达。在调用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)