Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.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 WebWorker-异步/等待_Javascript_Async Await_Web Worker - Fatal编程技术网

Javascript WebWorker-异步/等待

Javascript WebWorker-异步/等待,javascript,async-await,web-worker,Javascript,Async Await,Web Worker,我正在尝试卸载阻塞UI的长时间运行的进程 WebWorker方法似乎是解决这种情况的最佳方法 但是,我需要使用的一个库具有async/await WebWorker有一个有限的JSAPI,似乎没有async/await 有没有一种在网络工作者内部使用承诺的方法 错误 ReferenceError:\未定义等待器 问候, 丹尼尔 更新: 添加“等待者”导致承诺未被认可 var __awaiter = (this && this.__awaiter) ||

我正在尝试卸载阻塞UI的长时间运行的进程

WebWorker方法似乎是解决这种情况的最佳方法

但是,我需要使用的一个库具有async/await

WebWorker有一个有限的JSAPI,似乎没有async/await

有没有一种在网络工作者内部使用承诺的方法

错误

ReferenceError:\未定义等待器

问候,

丹尼尔

更新:

添加“等待者”导致承诺未被认可

var __awaiter =
        (this && this.__awaiter) ||
        function(thisArg, _arguments, Promise, generator) {
            return new Promise(function(resolve, reject) {
                generator = generator.call(thisArg, _arguments);
                function cast(value) {
                    return value instanceof Promise && value.constructor === Promise
                        ? value
                        : new Promise(function(resolve) {
                                resolve(value);
                          });
                }
                function onfulfill(value) {
                    try {
                        step('next', value);
                    } catch (e) {
                        reject(e);
                    }
                }
                function onreject(value) {
                    try {
                        step('throw', value);
                    } catch (e) {
                        reject(e);
                    }
                }
                function step(verb, value) {
                    var result = generator[verb](value);
                    result.done
                        ? resolve(result.value)
                        : cast(result.value).then(onfulfill, onreject);
                }
                step('next', void 0);
            });
        }
下面是构建web worker的基本代码

/* eslint-disable */
export default function ModelWorker() {
  this.window = this

  onmessage = async (e) => {
    console.log(e);
  }
}
WorkerProxy.js

export default class WorkerProxy {
  constructor(worker) {
    const code = worker.toString()
    const src = code.substring(code.indexOf('{') + 1, code.lastIndexOf('}'))
    const blob = new Blob([src], { type: 'application/javascript' })
    return new Worker(URL.createObjectURL(blob))
  }
}
SomeComponent.js

import WorkerProxy from './WorkerProxy'
import ModelWorker from './ModelWorker'


if (!!window.Worker) {
  const worker = new WorkerProxy(ModelWorker)
  worker.addEventListener('message', e => console.log(e.data))
  worker.postMessage({ message:message })
  // Load labels, etc.
}

async
/
await
ECMAScript语言的一部分,并且在所有全局范围内都可用,包括窗口、Web工作程序、服务工作程序、音频工作集、绘制工作集等

这些作用域可能没有一些Web API,比如DOM API、MediaDevices API、Geolocation API和其他一些API。但是,只要浏览器支持此ECMAScript功能,所有作用域都将被删除

因此,我无法判断您的问题是什么,但在Worker中使用Promissions和async/await绝对是可能的

const worker=新的worker(
URL.createObjectURL(
新Blob([worker\u script.textContent])
)
);
worker.onmessage=({data})=>console.log(数据)

(异步函数(){
postMessage(['starting',performance.now()]);
等待等待(2000年);
postMessage(['end',performance.now()]);
})();
函数等待(时间){
返回新承诺((res)=>setTimeout(res,time));
}

此文件的可能副本过于抽象。请共享相关代码和a。您可能需要确保定义了
\uuuu waiter
,然后关于您的编辑,调用
\uu waiter
的位置在哪里?