带参数

时间:2018-01-26 12:24:04

标签: javascript callback ethereum web3

我通过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, ...);
                        }
                    }
                })
            }




这可能吗?

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

0 个答案:

没有答案