![](/img/trans.png)
[英]Make javascript function with callback/promise implementation to always return a promise
[英]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.