我想将数据推送到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]);发布于 2018-12-21 02:43:37
这是Javascript中异步编程的一个问题。
您可以定义一个函数来发送已签名的事务,并在收到事务确认时调用回调函数。
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而不是回调来完成相同的任务。
发布于 2018-12-21 02:34:42
how can i run it after then ?在这些情况下,您可能可以使用一些异步管理,例如promise,因为使用全局变量不是最佳实践:
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]); });如果你想这样分配它,你甚至可以用async/await来实现它:
const results = await Transaction();将此代码包装在异步块中
https://stackoverflow.com/questions/53873982
复制相似问题