如何在异步 javascript 和 web3js 中将 return 值传递给调用函数
how to return value to caller function in asynchronous javascript and web3js
在下面的示例中,我可以看到 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;
}
仍然无法正常工作....
最方便的方法是使用回调,如下所示:
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})
})
}
在下面的示例中,我可以看到 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;
}
仍然无法正常工作....
最方便的方法是使用回调,如下所示:
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})
})
}