Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript:工作同步_Javascript_Html_Web Worker - Fatal编程技术网

javascript:工作同步

javascript:工作同步,javascript,html,web-worker,Javascript,Html,Web Worker,我正在使用HTML5WebWorker,我制作了一个函数,生成了几个worker并返回结果,但问题是它在worker更新结果之前返回值。所以我想延迟返回语句,直到收到所有结果 for (i = 0; i < array1_rows; i++) { var worker = new Worker('json.js'); worker.postMessage(arr1[i]); worker.postMessage(arr2); worker.postMessa

我正在使用HTML5WebWorker,我制作了一个函数,生成了几个worker并返回结果,但问题是它在worker更新结果之前返回值。所以我想延迟返回语句,直到收到所有结果

for (i = 0; i < array1_rows; i++)
{
    var worker = new Worker('json.js');
    worker.postMessage(arr1[i]);
    worker.postMessage(arr2);
    worker.postMessage(i);

    worker.onmessage = storeResult;
}

/////////////////////////////////

return result;
for(i=0;i
所以我只想延迟返回语句,直到收到结果。
请帮助我如何在java脚本中使用yield。

就像评论中指出的那样-Web工作人员异步工作(想想AJAX是如何工作的)

只有当它们全部完成时,才能使用异步信号量来产生

function doSomething(callback){
    var counter = array1_rows;
    for (i = 0; i < array1_rows; i++)
    {
        var worker = new Worker('json.js');
        worker.postMessage(arr1[i]);
        worker.postMessage(arr2);
        worker.postMessage(i);

        worker.onmessage = function(){
            storeResult.apply(arguments);//call it the same way it was called before.
            counter--;
            if(counter === 0){ // all workers returned
                callback(result); //or whatever you're updating in storeResult
            }
        };
    }
}

有关JS异步操作如何工作的更多信息,我建议您提供一个包含问题描述和解决方法的说明。

如评论所述-Web工作人员异步工作(想想AJAX是如何工作的)

只有当它们全部完成时,才能使用异步信号量来产生

function doSomething(callback){
    var counter = array1_rows;
    for (i = 0; i < array1_rows; i++)
    {
        var worker = new Worker('json.js');
        worker.postMessage(arr1[i]);
        worker.postMessage(arr2);
        worker.postMessage(i);

        worker.onmessage = function(){
            storeResult.apply(arguments);//call it the same way it was called before.
            counter--;
            if(counter === 0){ // all workers returned
                callback(result); //or whatever you're updating in storeResult
            }
        };
    }
}

有关JS异步操作如何工作的更多信息,我建议您提供一个包含问题描述和解决方法的说明。

Web Workers是异步的,您不能同步它们。Web Workers是异步的,你不能同步它们。但我的问题仍然是我不想打印结果我想返回结果,所以我应该在哪里写返回语句以确保正确的结果你不能。worker是异步的,您接受回调,并在代码完成时执行回调。请阅读我链接到的AJAX问题,了解异步JavaScript是如何工作的。请注意,onmessage的属性/方法区分大小写。这意味着如果你写的是onMessage而不是onMessage,那么这个方法将不会被执行,所以要小心。但是我的问题仍然是一样的,我不想打印结果,我想返回结果,所以我应该在哪里写return语句来确保正确的结果你不能。worker是异步的,您接受回调,并在代码完成时执行回调。请阅读我链接到的AJAX问题,了解异步JavaScript是如何工作的。请注意,onmessage的属性/方法区分大小写。这意味着,如果您编写onMessage而不是onMessage,那么该方法将不会执行,因此请小心。