我有一個第三方JavaScript對象,我在其上調用方法「搜索」,並將搜索查詢字符串和函數一起傳遞,以便在搜索完成後執行。該第三方對象然後消失並嘗試從服務中檢索數據。如果服務調用在10秒內未能返回,則第三方對象會記錄一個超時錯誤,但不幸的是不會執行狀態爲「超時」或其他適用的回調函數。在閉包中調用setTimeout會導致內存泄漏?
爲了讓時出現了超時回調執行,我裹第三方對象調用按照下面的代碼:如果正在創建一個閉合
var SEARCH_TIMEOUT_MILLISECONDS = 10500;
var thirdPartyObject = ... // Global variable
function search(searchTerm, onCompleteCallback) {
var searchTimeoutHandler = setTimeout(function() {
onCompleteCallback(null, 'TIMEOUT');
}, SEARCH_TIMEOUT_MILLISECONDS);
thirdPartyObject.search({
searchTerm: searchTerm,
onComplete: function (searchResponse, status) {
clearTimeout(searchTimeoutHandler);
onCompleteCallback(searchResponse, status);
}
});
}
,如果這函數被調用了幾百次(一些併發),在setTimeout函數的情況下是否存在任何內存問題,無論是否被調用?
這裏最糟糕的情況是超時函數似乎不會中止搜索,因此如果搜索在10.5秒後返回,那麼即使onCompleteCallback(null,'TIMEOUT'),onCompleteCallback(searchResponse,status)已經執行了。 –