2016-09-01 6 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

すべての依存性のある約定が完了するまで、長時間実行されている約束をどのように実行しますか?

最初の約束は、解決されたとき(最上位レベルの保存が終了したとき)に解決され、「実行し続ける」ことはできません。すべてのサブモデルを保存するという約束を返す必要があります。 mapを使用して

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

または単により多く、:

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); 
    }); 
    } 
} 
関連する問題