【发布时间】:2022-01-22 07:39:16
【问题描述】:
我想测量计算因式分解的网络工作者的执行时间。 webworker 正在传递实时结果,一旦计算终止,webworker 就会发送一条“完成”消息。我在我的 react 应用程序中使用了 Promise 来执行此操作。
useEffect(() => {
const measureTimeStart = performance.now();
(async () => {
try {
await new Promise(resolve => {
const worker = new Worker(new URL('facto.js', import.meta.url));
worker.postMessage(number);
worker.onmessage = message => { //streaming live results
const { facto, status } = message.data;
setResults({ ...facto }); //adding them to React state
if (status === 'finished') {
resolve();
worker.terminate();
};
};
});
} catch (error) {
console.log(error)
}
})();
const measureTimeEnd = performance.now();
setExecutionTime(Math.round((measureTimeEnd - measureTimeStart) * 1000) / 1000 + ' ms');
}, [number]); //number to factorize
但是,performance.now() 不会等待承诺解决,因此给了我任意时间。为什么?谢谢。
【问题讨论】:
-
你的代码不会等待你创建的自执行函数
标签: javascript reactjs async-await promise web-worker