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。请参阅我的最新答案。