【发布时间】:2016-08-16 23:08:00
【问题描述】:
我正在尝试在 JavaScript 中进行一些繁重的计算。我目前正在将 React 与 Redux 一起使用。
使用诸如 fetch 或 jQuery ajax 请求之类的库执行 fetch 或服务器请求是工作按预期异步的,但是我无法使用我自己的 JavaScript 函数在客户端进行异步计算。
使用 setTimeout 在 React 组件 componentDidMount 函数中执行此操作会阻塞我的 UI:
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 都会冻结,直到计算完成。
也许我应该通过网络工作者或其他方式来解决这个问题,因为我无法通过 setTimeout 来释放我的 UI 线程。
【问题讨论】:
标签: javascript reactjs asynchronous react-redux redux-thunk