簡體   English   中英

使Ember函數從回調返回承諾

[英]Make Ember function return a promise from callback

我想讓一個函數返回來自model.save()的promise,但是對model.save()的調用在回調函數中,因此沒有構成它的鏈。 這就是我的意思:

function saveOn (target, attribute) {
    target.addObserver(attribute, function () {
        if (target.get(attribute)) {
            target.removeObserver(attribute);
            Ember.run.once(target, function() {
                target.save();
            });
        }
    });
};

(此功能是解決我先前發布的問題所必需的)

我想要target.save(); 改為: return target.save();

然后我可以這樣做:

saveOn().then();

其中,因為它代表不工作,該錯誤消息簡單地在於then不該對象上存在。

更新

teacherSignUp: function() {
    var model = this.get('model');
    var teacher = this.get('store').createRecord('teacher', {
        description: 'Why hello sir',
        user: model
    });
    model.set('teacher', teacher);
    saveOn(teacher, 'user.isFulfilled').then(function() {
        console.log("Model");
        saveOn(model, 'teacher.isFulfilled');
    });
}

console.log("Model"); 已成功調用,但模型從未永久存在。 這里發生了什么事?

更新已解決

模型上的第二個觀察者從未解雇,因為在老師完成saveOn ,模型已經完成。 我只是更改了saveOn(model, 'teacher.isFulfilled'); 進行model.save(); 而且效果很好。

傳遞另一個參數。

function saveOn (target, attribute, then) {
    target.addObserver(attribute, function () {
        if (target.get(attribute)) {
            target.removeObserver(attribute);
            Ember.run.once(target, function() {
                var promise = target.save();
                if(then){ 
                  promise.then(function(){ then(); });
          });
        }
    });
};

或在那時創造另一個承諾並解決

function saveOn (target, attribute) {
    return new Ember.RSVP.Promise(function(resolve, reject){

      target.addObserver(attribute, function () {
        if (target.get(attribute)) {
            target.removeObserver(attribute);
            Ember.run.once(target, function() {
                target.save().then(function(record){ resolve(record); },
                      function(error){ reject(error); });
          });
        }
      });
    });
};

Teacher.isFulfilled可能已經更改,因此觀察者沒有觸發,因為它沒有改變,請在創建觀察者之前嘗試檢查,如果已經存在/存在則跳過該部分。

暫無
暫無

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

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