我正在尝试让 jQuerydeferred
工作并且遇到了一些问题。
我的系统postMessage
用于在网站上的沙盒区域之间传递消息。因此,当我从这样的沙盒区域请求服务时:
// on click of button
foo.requestService(options, function (response) {
$("#c").val(response); // set value of input button
}
new $.deferred
在内部,每次单击按钮并请求服务时,我都会创建一个,如下所示:
that.requestService = $.fn.requestService = function (options, callbackFunction) {
var deferred = new $.Deferred(),
callbackId = priv.generateUuid(),
callback = deferred;
// store callback to be retrieved by response handler
priv.trackCallback(callbackId, callback, callbackFunction);
// set type
if (options.type === undefined) {
options.type = "request/any";
}
// the callback function to be run, once a postMessage
// with the response is received
deferred.done(function(result, callbackFunction) {
if (callbackFunction) {
callbackFunction(result);
}
});
// trigger messaging
window.top.postMessage(options, window.location.href);
};
一切正常,我可以请求我的沙盒服务,运行它,发布结果并检索相应的回调:
priv.returnResult = function (event) {
// here I get back the deferred (callback[0]) and callback function (callback[1])
var callback = priv.retrieveCallback(event.data.callback);
// problem = the callback stays resolved after the first function call
console.log(callback[0].state());
callback[0].resolve(event.data.result, callback[1]);
};
我的问题是,虽然我在**new** $.Deferred
每次请求服务时都创建一个,但我的延迟对象只运行第一次然后设置为resolved
,防止任何进一步的函数调用返回结果。
我认为new $.Deferred
每次请求服务时都会生成一个新的延迟,我可以解决它来运行我的回调函数。
问题
我需要做什么才能使其正常工作?是不是,new创建了一个我可以解决的新对象?我是否必须以某种方式删除/删除以前的 resolved.deferred 对象才能使其工作?
谢谢!