我有下面的示例代码,它使用jQuery延迟。我似乎无法理解的是,虽然brushTeeth函数返回一个被拒绝的promise,但为什么另一个deferred的collectionResults总是被解析。
一些jQuery延迟阅读说如果$ .when中传递的函数不是promises,它们将立即被解析,但brushTeeth实际上会返回一个promise。
线索我在这里做错了什么?
ShowerModule = ( function($) {
function init(){
var result = $.Deferred();
var collectionResults = $.when(brushTeeth);
collectionResults.done(function(){
console.log("done");
})
collectionResults.fail(function(){
console.log("reject");
})
}
function brushTeeth() {
var result = $.Deferred();
result.reject('["bah"]');
return result.promise();
}
return {
init : init
}
}(jQuery));
ShowerModule.init();
答案 0 :(得分:1)
想出来
var collectionResults = $.when(brushTeeth);
上面的行应该是
var collectionResults = $.when(brushTeeth());
答案 1 :(得分:0)
您已创建两个具有相同名称result
所以我猜$。当上面的那个是承诺..是不被拒绝的.. 试试这个
function init(){
// var result = $.Deferred(); remove this
var collectionResults = $.when(brushTeeth()); //accept function and not the function's reference
collectionResults.done(function(){
console.log("done");
})
collectionResults.fail(function(){
console.log("reject");
})
}