[英]Deftjs promise done() not working
我是承诺的新手,但我看了一些使用Deft.js的例子,我想知道为什么我的基本例子不起作用。
看看这个网站 ,我认为.done()
函数应该可以工作,但我一直都会遇到错误。
这是我的代码:
onScopeChange: function(scope) {
var promise = this.loadStories(scope).then({
success: function(records) {
console.log(records);
},
failure: function(error) {
alert(error);
}
}).always(function() {
// Do something whether call succeeded or failed
console.log('this should always appear');
}).done();
},
loadStories: function(scope) {
var deferred = Ext.create('Deft.promise.Deferred');
Ext.create('Rally.data.wsapi.Store', {
autoLoad: true,
model: 'UserStory',
fetch: ['FormattedID', 'Name', 'ScheduleState','RevisionHistory'],
filters: [scope.getQueryFilter()],
listeners: {
load: function(me, records, success) {
this._onStoriesLoaded(deferred, records, success);
},
scope: this
}
});
return deferred.promise;
},
_onStoriesLoaded: function(deferred, records, success) {
console.log('stories loaded ...');
if (success) {
deferred.resolve(records);
} else {
deferred.reject("Error loading stories");
}
}
这只是一个非常基本的例子,其中'Rally.data.wsapi.Store'
导致异步回调。
我的问题只是为什么.done()
不起作用 - 我不断收到错误说:
TypeError: Object [object Object] has no method 'done'
这意味着我的'promise'对象实际上并不是Deft Promise对象,对吧?
你确定你使用的是Deft的最新版本吗? 在你正在链接的页面上,他说done()
将被整合到Deft v0.9中。
我已经针对Deft v0.9.1测试了以下代码,它的工作方式完全符合预期:
function defer() {
var deferred = new Deft.promise.Deferred;
deferred.reject('Done');
return deferred.promise;
}
defer()
.then({
success: function(result) {
console.log('Success: ' + result);
}
,failure: function(result) {
console.log('Failure: ' + result);
a = b; // runtime error
}
})
.always(function() {
console.log('Always');
})
.done();
给我:
Failure: Done app.js:15
Always app.js:20
Uncaught ReferenceError: b is not defined
我没有被告知done()
未定义,并且没有done()
调用,吞并了运行时错误。
(顺便说一句,感谢你引起我的注意,Deft已经发展了......错误的消息曾经给了我一些很大的悲伤!)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.