为什么在then块中返回缓存的jQuery承诺无法解决它?

为什么在then块中返回缓存的jQuery承诺无法解决它?,jquery,Jquery,我利用jQuery承诺缓存AJAX请求,当我试图在then子句中返回缓存的承诺时,这种方法似乎失败了;我不确定为什么会发生这种情况,我想知道是否有办法解决它 如果我伪造密钥并将If self.fGetSearchResults.oCache[…块放在块外部的缓存定义下,那么代码将按预期工作 MCG.searchControls.fGetSearchResults = function fGetSearchResults() { var self = this; var oDef

我利用jQuery承诺缓存AJAX请求,当我试图在then子句中返回缓存的承诺时,这种方法似乎失败了;我不确定为什么会发生这种情况,我想知道是否有办法解决它

如果我伪造密钥并将If self.fGetSearchResults.oCache[…块放在块外部的缓存定义下,那么代码将按预期工作

MCG.searchControls.fGetSearchResults = function fGetSearchResults() {
    var self = this;

    var oDeferred = $$.Deferred(); // `new` keyword is optional and we don't like it
    var oPromise = oDeferred.promise();

    self.fGetSearchResults.oCache = self.fGetSearchResults.oCache || {}; // creates a persistent cache across function calls

    // perform the search
    $$.when(
        self.fPromiseOfFilterObject() 
    ).done(
        function fDoneCallback(oFilterObject) {
            /* create the RecordListService parameters which we will query with */
            ..
            var oRecordListServiceParametersAsKey = JSON.stringify(oRecordListServiceParameters);
            // leverage our cache here
            if (self.fGetSearchResults.oCache[oRecordListServiceParametersAsKey] !== undefined) {
                return self.fGetSearchResults.oCache[oRecordListServiceParametersAsKey];
            } else {
                self.fGetSearchResults.oCache[oRecordListServiceParametersAsKey] = oPromise; // cache the result for next time
            }

            // do the ajax call now
            $.orchestracmsRestProxy.doAjaxServiceRequest('ocms_socfp.RecordListService', oRecordListServiceParameters,
                function(status, json) {
                    ...
                    oDeferred.resolve(json)
                });
        });
    return oPromise; // return a our promise object which will resolve at some point
}

马上,我会说你的.done语法可能是错误的..donefunctionoFilterObject应该是预期的。@Chris cavince:有什么问题吗?我不知道有什么问题,只是jQuery有问题。done需要一个函数或一个函数数组。使用函数声明不是我以前尝试过的。函数foobar是一个声明在{}上,functionbar{}是一个匿名函数。我希望看到.donefuncname或.donefunctionparm{}不是.donefunctionfoobar{};我猜函数foobar将返回它自己,所以可能不是问题,只是一个意外的语法。我假设您从oFilterObject生成OreRecordListServiceParameters。self.fpromiseofilterobject返回一个如何定义的承诺?我问这个问题是因为我认为您可以通过向oFilterObjec添加一个parm来完全消除缓存t、 类似于oFilterObject.servicePromise={}然后,您的代码将成为FilterObject.servicePromise | | | oDeferred.PromiseofFilterObject的返回。servicePromise@ChrisCaviness:它与jquery无关。在JS中,您可以在函数表达式的上下文中使用函数声明。这样,它就不会被声明,但名称将在函数本身的上下文中可用。