Javascript ReactJS中的异步函数阻塞组件
在ReactJs应用程序中,我有一个组件正在进行一些繁重的计算,并希望在这些计算完成时显示加载的gif。我尝试通过以下两种方式在组件中创建异步函数:Javascript ReactJS中的异步函数阻塞组件,javascript,reactjs,asynchronous,Javascript,Reactjs,Asynchronous,在ReactJs应用程序中,我有一个组件正在进行一些繁重的计算,并希望在这些计算完成时显示加载的gif。我尝试通过以下两种方式在组件中创建异步函数: compute=async(数据)=>{ var承诺=新承诺((解决、拒绝)=>{ var张量=tf.张量(令牌,[1100]) log(“开始预测”) var prediction=this.model.predict(张量);//这是一个繁重的计算 prediction.data().then((结果)=>resolve(结果)) }); 回报
compute=async(数据)=>{
var承诺=新承诺((解决、拒绝)=>{
var张量=tf.张量(令牌,[1100])
log(“开始预测”)
var prediction=this.model.predict(张量);//这是一个繁重的计算
prediction.data().then((结果)=>resolve(结果))
});
回报承诺
}
compute=async(数据)=>{
var张量=tf.张量(令牌,[1100])
log(“开始预测”)
var prediction=this.model.predict(张量);//这是一个繁重的计算
返回预测。数据()
}
当用户单击按钮时调用此函数:
onClickCompute=()=>{
this.setState({loading:true},()=>{
这个.计算(数据).然后((数据)=>{
this.setState({result:data,load:false})
})
});
}
我的问题是(对于async函数的两个版本),当计算完成时,应该显示的gif被冻结并且不显示动画。
我假设异步模式足以在后台执行计算,而不会阻塞DOM
如果不是这样,我该如何解决我的问题?我需要将计算放在一个单独的辅助进程中吗?不使用wait,async无效。据我所知,关键字async只允许使用wait。请给出完整的“onClickCompute”,因为问题不在于您认为您必须从计算方法返回承诺。您必须在调用compute方法之前将加载标志设置为true,在结束计算之后将其设置为false。此外,如果返回一个承诺,则在执行predict()时代码将冻结。如果不使用wait,async将无效。据我所知,关键字async只允许使用wait。请给出完整的“onClickCompute”,因为问题不在于您认为您必须从计算方法返回承诺。您必须在调用compute方法之前将加载标志设置为true,在结束计算之后将其设置为false。此外,如果返回一个承诺,则在执行predict()时代码将冻结。