所以我基本上做了很多對數組中的對象的操作。所以我決定使用webworkers,這樣我就可以以並行方式處理它們。但是,如果我輸入一個包含10個對象的數組,只有9個工作人員會返回一個值。所以我創造了這個簡單的樣機能重現問題:10個webworkers創建,但只有9個返回值
var numbers = [12, 2, 6, 5, 5, 2, 9, 8, 1, 4];
var create = function(number) {
var source = 'onmessage = function(e) { postMessage(e.data * 3) }';
var blob = new Blob([source]);
var url = window.URL.createObjectURL(blob);
return new Worker(url)
};
var newnumbers = [];
for (var i = 0; i < numbers.length; i++) {
var worker = create();
worker.onmessage = function(e) {
newnumbers.push(e.data);
worker.terminate();
}
worker.postMessage(numbers[i]);
}
因此,基本上,在德陣列中的每個數字被乘以3,並加入到新陣列newnumbers
。但是,numbers.length = 10
和newnumbers.length=9
。我調試了一段時間,並驗證了10名工人的創建。
我覺得我在做一些愚蠢的錯誤,但有人可以解釋一下嗎?
絕對固定的,所以都是工人也正常終止呀? –
是的,因爲每個迭代中創建的每個worker都會發生'worker.terminate()'調用。在使用全局'var worker'變量實現時,'worker.terminate()'僅在最後一個worker上被調用了10次。 – Cristy