我想在JavaScript中进行一些重型计算。目前,我使用React和Redux。
使用fetch或jQuery ajax等库进行请求会像预期的那样异步工作,但是我无法使用自己的JavaScript函数在客户端上执行异步计算。
在React组件componentDidMount函数中使用setTimeout这样的方法会阻塞我的用户界面:
componentDidMount () {
setTimeout(function() {
... do heavy calculations
}, 0)
}
或者在类似这样的调度操作中(我使用redux-thunk):
heavyCalculationsAction: () => {
return dispatch => {
return new Promise(function (resolve, reject) {
setTimeout(function () {
... perform heavy calculations here
resolve(data)
}, 0)
}).then((data) => {
distpatch(computationsDone(data))
})
}
}
在这两种情况下,UI界面会冻结直到计算完成。
也许我应该使用Web Workers或其他方法来处理,因为我无法通过setTimeout释放UI线程。