2016-09-01 74 views
0

我使用的是ember-async button,它將顯示一個微調,直到動作承諾解決。立即解決多個彼此依賴的承諾

{{async-button action=(action "save" model) default="Save" pending="Saving..."}} 

在我的情況下,我無法啓動子承諾,直到父承諾解決。

這不起作用,只要父承諾解決,微調器就會停止。

actions: { 
    save(model) { 
    cont promise = model.save(); 

    promise.then(() => { 
     const promises = []; 
     model.get('subModels').forEach((subModel) => { 
     promises.pushObject(subModel.save()); 
     }); 

     return Ember.RSVP.all(promises); 
    }); 

    return promise; 
    } 
} 

我如何保持長時間運行的諾言運行,直到所有相關的承諾已經完成,考慮到一些承諾都依賴別人完成?

回答

2

我該如何保持長時間運行的承諾,直到所有從屬承諾完成?

初始許諾會在其解決時解決(當頂級保存結束時),並且不能「保持運行」。您需要返回保存所有子模型的承諾。

return promise.then(() => { 
    const promises = []; 
    model.get('subModels').forEach((subModel) => { 
    promises.pushObject(subModel.save()); 
    }); 
    return Ember.RSVP.all(promises); 
} 

或者更簡單地說,使用map

return promise.then(() => 
    Ember.RSVP.all(model.get('subModels').map(subModel => subModel.save())); 
0

你的問題很簡單,你return promise而不是返回的promise.then(...)結果。

actions: { 
    save(model) { 
    cont promise = model.save(); 

    return promise.then(() => { 
     const promises = []; 
     model.get('subModels').forEach((subModel) => { 
     promises.pushObject(subModel.save()); 
     }); 

     return Ember.RSVP.all(promises); 
    }); 
    } 
}