[英]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.