1

我有下面使用 jQuery deferred 的示例代码。我似乎无法理解的是,虽然 BrushTeeth 函数返回了一个被拒绝的承诺,但为什么另一个延迟的 collectionResults 总是被解决。

一些 jQuery 延迟阅读说如果传入 $.when 的函数不是承诺,它们将立即被解析,但 BrushTeeth 实际上返回一个承诺。

线索我在这里做错了什么?

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();
4

2 回答 2

1

弄清楚了

var collectionResults = $.when(brushTeeth);

上面的行应该是

var collectionResults = $.when(brushTeeth());
于 2013-03-08T06:29:09.843 回答
0

您已经创建了两个同名的延迟对象result

所以我猜 $.when 将它上面的那个作为承诺.. 没有被拒绝.. 试试这个

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

                }
于 2013-03-08T06:12:08.707 回答