Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/25.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 在继续之前,如何使异步代码执行_Javascript_Reactjs_Asynchronous - Fatal编程技术网

Javascript 在继续之前,如何使异步代码执行

Javascript 在继续之前,如何使异步代码执行,javascript,reactjs,asynchronous,Javascript,Reactjs,Asynchronous,我对胡克很不熟悉,一般都会有反应。我遇到了一个我无法解决的问题,就在这里。我有一个报价函数,用来计算福利的成本价格 const quotation = useCallback(()=> { setCostPrice(0) keys.forEach(e => { for (const property in values){ if ((property==e && values[property]==true){ setCos

我对胡克很不熟悉,一般都会有反应。我遇到了一个我无法解决的问题,就在这里。我有一个报价函数,用来计算福利的成本价格

const quotation = useCallback(()=> {
  setCostPrice(0)
  keys.forEach(e => {
    for (const property in values){
      if ((property==e && values[property]==true){
        setCostPrice(costPrice + pricing[property])
      }
    }
  })
})
这是我的问题,每次选中复选框时,我都调用函数quote()(这样成本价格就会更新)。问题是,假设函数每次调用时都在0处“重置”costprice,但由于使用“setCostPrice(0)”是异步的,因此结果不正确。我读过关于使用useffect()的不同帖子,但当我使用useffect时,函数无法从values[property]读取值


我不知道如何解决这个问题,如果有人想帮助我,我将不胜感激

如果您需要等待一些异步操作,只需将您的函数设置为
async
并在内部使用
wait

const quote=useCallback(异步()=>{
等待设置成本价格(0)
...
})
如果无法应用
异步/等待
,请使用
。然后()

const quote=useCallback(()=>{
设置成本价格(0)。然后(()=>{
keys.forEach(e=>{
...
});
});
})
如果此
setCostPrice()
来自
useState()
hook,则如下所示:

const[,setCostPrice]=useState(…);
您可以在那里提供回调以接收最新状态

setCostPrice(
oldPrice=>{/*从此处返回新价格*/}
);

顺便说一下,您需要为
useCallback()
hook提供dep列表。否则它将不起作用。

使用局部变量进行计算,然后使用
setCostPrice
设置一次价格。这些状态设置器不会返回承诺,因此
async/wait
then
将无法像您希望的那样工作。只是尝试并确定它不起作用:/我只看到
setCostPrice(0)的语句“is asynchronous结果不是正确的
,并且没有想到它来自
useState()
hook。请参阅我的最新答案。