Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/416.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript ReactJS中的异步函数阻塞组件_Javascript_Reactjs_Asynchronous - Fatal编程技术网

Javascript ReactJS中的异步函数阻塞组件

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(结果)) }); 回报

在ReactJs应用程序中,我有一个组件正在进行一些繁重的计算,并希望在这些计算完成时显示加载的gif。我尝试通过以下两种方式在组件中创建异步函数:

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()时代码将冻结。