メソッド「search」を呼び出し、検索が完了したら実行する関数とともに検索クエリ文字列を渡すサードパーティの JavaScript オブジェクトがあります。その後、このサードパーティ オブジェクトは立ち去り、サービスからデータを取得しようとします。サービス呼び出しが 10 秒以内に戻らない場合、サードパーティ オブジェクトはタイムアウト エラーをログに記録しますが、残念ながら「タイムアウト」またはその他の該当するステータスでコールバック関数を実行しません。
タイムアウトが発生したときにコールバックを実行するために、次のコードに従ってサードパーティ オブジェクトの呼び出しをラップしました。
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 関数が呼び出されるか呼び出されないかのシナリオでメモリの問題が発生しますか?