0
我試圖執行一段代碼,它是資源密集型的,它在執行時鎖定瀏覽器。作爲一種解決方法,我正在嘗試將mbostock的queue.js庫與setTimeout結合使用來對執行進行速率限制,以防止用戶注意到鎖定。呼叫必須按照特定的順序進行,但需要在兩者之間有一段呼吸時間(目前我正在使用25毫秒)。setTimeout使用queue.js
我無法弄清楚如何將事物連接在一起。
具體來說,setTimeout函數作用域內的'param'變量的可用性似乎存在問題。當這段代碼執行時,param最終會成爲每個迭代的同一個實例,而不是像預期的那樣是不同的實例。
var q = queue(1);
var waitParamInits = [];
var keys = Object.keys(attr.customParams);
for (var i=0; i < keys.length; i++) {
var param = attr.customParams[keys[i]];
var wait = function(callback) {
setTimeout(function() {
if (!param.initializeParm()) {
handleError('Error initializing parameter: ' + param, false);
}
}, 25, param);
};
waitParamInits.push(wait);
}
waitParamInits.forEach(function(t) {q.defer(t); });
q.awaitAll(function(error, results) {
console.log('finished with wait params');
});