簡體   English   中英

打字稿:等待所有承諾

[英]Typescript: Wait for all promises

我的承諾遇到了一個小問題。

這是我的功能:

public generateMealPlanForAWeek(myMealProfile: any, totalCalories:number):Promise<any> {
        return new Promise(resolve => {
            let mealplan:Array<any> = [];
            for (let i = 1; i <= 7; i++) {
                this.generateMealPlanForOneDay(myMealProfile, totalCalories).then(data => {
                    mealplan.push(data); // resolves much later
                });
            }
            resolve(mealplan); // is resolved instant
        })
    }

我的問題是,“generateMealPlanForOneDay”將在之后的膳食計划本身得到解決。

Mealplan是一系列物體(在這種情況下是用餐)。

當我想保存我的膳食計划時,膳食計划是空的:

this.storage.set('Mealplan', JSON.stringify(mealplan)).then(....) // meal plan is Array[0]

什么是解決我的膳食計划的所有膳食然后保存它的最佳方法?

在這種情況下,您可以使用Promise.all

public generateMealPlanForAWeek(myMealProfile: any, totalCalories:number):Promise<any> {
    var mealPlans = [];
    for (let i = 1; i <= 7; i++) {
       mealPlans.push(this.generateMealPlanForOneDay(myMealProfile, totalCalories));
    }
    return Promise.all(mealPlans);
}

// later
generateMealPlanForAWeek(...).then(mealPlans => ...);

您也可以使用事件流,而不是使用promises。

JavaScript的Reactive Extensions(RxJS,請參閱https://github.com/ReactiveX/RxJS )可以輕松地對事件流( Observable及其OnNext事件)作出反應,或者例如對事件流的結尾( OnCompleted事件),收集事件並保存他們的數據。

這是一個有趣的例子: https//xgrommx.github.io/rx-book/content/getting_started_with_rxjs/creating_and_querying_observable_sequences/creating_and_subscribing_to_simple_observable_sequences.html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM