我通过js中的web3与我的可靠性合同进行交互,我有以下功能:
// An investor buys tokens for ether
function buyTokens(account) {
document.getElementById("transaktion").innerText = "Transaction is going to be executed.";
web3.personal.unlockAccount(web3.eth.accounts[account], '******');
contract_instance.buy({from: web3.eth.accounts[account], value: document.getElementById('value').value}, function(error, result) {
if(error) {
console.error(error);
} else {
var txHash = result;
console.log(txHash);
callWhenMined(txHash, getTokenBalance);
}
function callWhenMined(txHash, callback) {
web3.eth.getTransactionReceipt(txHash, function(error, rcpt) {
if(error) {
console.error(error);
} else {
if(rcpt == null) {
setTimeout(function() {
callWhenMined(txHash, callback);
}, 500);
} else {
document.getElementById("transaktion").innerText = "";
callback();
}
}
})
}
// Gets the token balance
function getTokenBalance(id, account) {
document.getElementById(id).innerText = contract_instance.getMyInvestorBalance({from: web3.eth.accounts[account]});
}

如果用户想要购买以太币的代币(其实体是非常数函数),则交易需要开采。因此函数buyTokens(account)调用函数callWhenMined(txHash,callback),如果事务被挖掘,则每隔500ms检查一次。当它确实被调用时,将调用callback()导致问题:callback()调用getTokenBalance(),它需要两个参数(文档元素的id和帐号),因此回调函数将失败。但是如果我要调用callWhenMined(txHash,getTokenBalance(' testID',1));例如那样我会得到回调不是函数的错误。我确实理解这并不是那样的,因为callback()doenst接受参数。所以我的问题是:有没有办法让函数callWhenMined接受需要调用的函数的参数?这样的事情?
function callWhenMined(txHash, callback(param1, param2, ...)) {
web3.eth.getTransactionReceipt(txHash, function(error, rcpt) {
if(error) {
console.error(error);
} else {
if(rcpt == null) {
setTimeout(function() {
callWhenMined(txHash, callback);
}, 500);
} else {
document.getElementById("transaktion").innerText = "";
callback(param1, param2, ...);
}
}
})
}

这可能吗?
我希望我的问题是什么以及我想要实现的目标有些清楚。提前致谢