jQueryを機能させようとしていdeferred
ますが、いくつか問題があります。
私のシステムはpostMessage
、Web サイトのサンドボックス化された領域との間でメッセージをやり取りするために使用しています。したがって、次のようなサンドボックス領域からサービスをリクエストすると:
// 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);
};
すべて正常に動作し、サンドボックス サービスをリクエストして実行し、結果を postMessage して、それぞれのコールバックを取得できます。
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
サービスがリクエストされるたびに新しい deferred が生成されると思いました。これを解決して、コールバック関数を実行できます。
質問
これを機能させるにはどうすればよいですか? new が解決できる新しいオブジェクトを作成するのではありませんか? 以前の resolve.deferred オブジェクトを機能させるために、どうにか削除/削除する必要がありますか?
ありがとう!