在下面的示例中,我可以看到hash
是从someFunction
写入控制台的,但是我无法将r返回到callerFunction
。输出为undefined
。我如何将h
的值返回到callerFunction
async function caller(){
var val = 10;
let result = await someFunction(val);
console.log(result);
}
async function someFunction(val) {
let r = await contract.methods.updateValue(val).send({from: account})
.on('transactionHash', function(h){
console.log(h);
return h;
})
return r;
}
我尝试了以下几种变体:
版本1
async function someFunction(val) {
return contract.methods.updateValue(val).send({from: account})
.on('transactionHash', function(h){
console.log(h);
return h;
})
return r;
}
版本2
async function someFunction(val) {
return r = contract.methods.updateValue(val).send({from: account})
.on('transactionHash', function(h){
console.log(h);
return h;
})
}
版本3
async function someFunction(val) {
var result;
let r = await contract.methods.updateValue(val).send({from: account})
.on('transactionHash', function(h){
console.log(h);
result = h;
})
return result;
}
仍然无法正常工作。...
答案 0 :(得分:0)
最方便的方法是按如下方式使用回调:
async function caller(){
var val = 10;
await responder(val, async function(e, res){
if(res.status === 'success' && res.hash) {
//do stuff with res.hash
} else {
//handle error here
}
})
}
async function responder(val, callback) {
contract.methods.updateValue(val).send({from: account})
.on('transactionHash', (hash) => {
callback(null, {'status': 'success', 'hash': hash});
})
.on('error', (e)=> {
callback(null, {'status': 'error', 'error': e.message})
})
}