Skip to content

Latest commit

 

History

History
50 lines (39 loc) · 1.2 KB

useWorker.md

File metadata and controls

50 lines (39 loc) · 1.2 KB

useWorker

Usage

function App() {
  const fun = (e) => e
  const messageToWorker = 'hello, world!'
  const [result, error] = useWorker(fun, messageToWorker)

  console.log('res', result)
  return (
    <div>
      <p>Message from worker: {result}</p>
    </div>
  )
}

Reference

const [result, error]: [R, string | null] =
  useDubouncedFunction<T, R>(fn: (message: T) => R, message: T);
  • fn: Function - 需要在 web Worker 中执行的函数;
  • message: T - 需要为函数传递的参数;
  • result: R - 函数执行的结果;
  • error: string | null - 如果函数执行错误返回的错误信息

issue

在测试过程中,发现递归函数会出现一些问题,导致不能正确的返回结果。如以下代码:

const fib = (i) => (i <= 1 ? i : fib(i - 1) + fib(i - 2))

这是由于在 Worker 中,全局对象不是主线程中的window对象,而是self对象。会报错fib未声明。 需要将代码在代码中再次进行声明,改写如下:

const fib = function (i) {
  const fibInner = function (i) {
    return i <= 1 ? i : fibInner(i - 1) + fibInner(i - 2)
  }
  return fibInner(i)
}