我想将数据推送到web3.eth.sendSignedTransaction之外,做这样的正确方法是什么:
let somearray = [];
web3.eth.sendSignedTransaction('0x'+transaction.serialize().toString('hex'))
.on('transactionHash',function(hash){
console.log("thash: " + hash);
}).on('confirmation', (confirmationNumber) => {
console.log('transferToReceiver confirmation: ' + confirmationNumber);
if(confirmationNumber == 1){
somearray.push("Transaction Confirmed");
}
});
console.log(somearray[0]);
答案 0 :(得分:0)
$query = "Select * from plays where usertype=2 and idgame=$idgame";
$result = mysqli_query(isConnect(),$query);
while($row = mysqli_fetch_array($result));
{
echo "$row[0]";
}
?>
在这些情况下,您可能可以使用一些异步管理,例如promise,因为使用全局变量不是最佳实践:
how can i run it after then ?
如果要像这样分配它,甚至可以使用async / await来实现它:
function Transaction() {
return new Promise((resolve, reject) => {
let somearray = [];
web3.eth.sendSignedTransaction('0x'+transaction.serialize().toString('hex'))
.on('transactionHash',function(hash){
console.log("thash: " + hash);
}).on('confirmation', (confirmationNumber) => {
console.log('transferToReceiver confirmation: ' + confirmationNumber);
if(confirmationNumber == 1){
somearray.push("Transaction Confirmed");
resolve(somearray)
}
});
});
}
Transaction().then(result => { console.log('results:', result[0]); });
将此代码包装在异步块中
答案 1 :(得分:0)
这是Java语言中异步编程的问题。
您可以定义用于发送已签名交易的函数,并在收到交易确认时调用回调函数。
function sendSignedTransaction(rawTx, callback) {
web3.eth.sendSignedTransaction(rawTx)
.on('transactionHash', (transactionHash) => {
console.log("TX Hash: " + transactionHash);
})
.on('confirmation', (confirmationNumber) => {
if(confirmationNumber == 1){
callback("Transaction Confirmed");
}
})
.on('error', console.error);
}
let somearray = [];
sendSignedTransaction(raw, function(confirmedMessage) {
somearray.push(confirmedMessage);
console.log(somearray[0]);
});
您还可以使用async
/await
代替回调来完成相同的操作。