jQuery延期不被拒绝

时间:2013-03-08 06:00:45

标签: javascript jquery jquery-deferred promise

我有下面的示例代码,它使用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();

2 个答案:

答案 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");
                    })

                }