我正在尝试设置一个微调器,而我的React应用程序进行了几次调用。我正在用Web3和Solidity编写一个DApp。在调用我的智能合约时,我试图设置状态以显示微调器,但在调用合约时,整个应用程序冻结了。在进行调用并返回值之后,它会快速设置微调器并取消设置微调器(你可以看到值更改控制台记录布尔值)。应用程序解冻并继续。我如何让微调器设置和应用程序不冻结,而调用:
onSubmit(e) {
e.preventDefault();
// inProcessOfCalling sh
this.setState({ inProcessOfCalling: true });
...
const contractData = callContract(parseTestJson.steps, web3);
Promise.all(contractData).then((values) => {
...
// turn spinner off
this.setState({ inProcessOfCalling: false });
});
}
function callContract(callInfo, web3) {
const dataArr = [];
for (let i = 0; i < callInfo.length; i += 1) {
// ...
const getData = thisContract[callInfo[i].func].getData(
...callInfo[i].args,
{ from: callInfo[i].from },
);
// ...
const trans = web3.eth.sendTransaction({
to: callInfo[i].contract,
from: callInfo[i].from,
data: getData,
});
let receipt = web3.eth.getTransactionReceipt(trans);
returnObj = {
receipt,
testName: callInfo[i].name,
expectPassed: callInfo[i].expects.success === transactionPassed,
expectMessage: callInfo[i].expects.message,
};
dataArr.push({ error: false, returnObj });
}
return dataArr;
}
我不认为这是一个web3的问题。我会假设它会冻结应用程序与作出任何多个提取调用的api。
1条答案
按热度按时间46scxncf1#
您已经调用了
callContract
函数,该函数很重,这里的请求〈-这是导致hang
的请求const contractData = callContract(parseTestJson.steps, web3);
在你把它放入Promise之前就已经被调用了。all而
contractData
根本不是Promise,你可以这样在函数内部返回Promise对象了解更多关于promise的信息https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise