问题描述
我想在我的 Metamask 钱包中运行 2 个待处理的:质押然后收获:
const [pendingTx,setPendingTx] = useState(false)
const {onReward} = useHarvest(pid)
const {onStake} = useStake(3)
<Button
disabled={rawEarningsBalance === 0 || pendingTx}
size='sm'
variant='secondary'
marginBottom='15px'
onClick={async () => {
setPendingTx(true)
await onStake(rawEarningsBalance.toString())
await onReward()
setPendingTx(false)
}
}
>
{TranslateString(999,'Pack it')}
</Button>
实际上,当我运行它时,我的第一个函数运行 (await onStake
) 但在我的钱包 Metamask 之后没有显示我确认收获。它显示我未经授权,所以我需要点击它以显示待处理的弹出窗口
解决方法
我不知道我是否遇到了你的问题...
如果您想与 onStake
并行运行 onReward
,则不能在每个之前使用 await
,因为它会等待此特定承诺完成。
您可以改为将所有应并行运行的承诺添加到此多承诺对象上的 Promise.all
和 await
。
onClick={async () => {
setPendingTx(true)
await Promise.all([
onStake(rawEarningsBalance.toString()),onReward()
]);
setPendingTx(false)
}