javascript - 如何在变量中使用此函数?
问题描述
我想在变量中使用这些函数的输出,以便稍后在我的代码中重新使用它们
function sellPrice() {
contract.sellPrice(function(err, result) {
if(err) {
console.log(err, 'err');
} else {
document.getElementById('sellPrice').innerHTML = result/100000000;
}
});
} sellPrice();
我也想在我的代码中进一步使用卖出价格,但我只能访问函数内部的(结果)
如何访问 sellFunction() 的结果?
这是我的代码:
const address = '0xE462CbEE0cd420f6c199B0194B1D8D93Fb5e7720';
// GLOBALS
const web3Mode = null
const walletMode = 'connect'
const currentAddress = null
const keystore = null
const dividendValue = 0
const tokenBalance = 0
//const contract = null
const abi = [{"constant":true,"inputs":[{"name":"_customerAddress","type":"address"}],"name":"dividendsOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_agiToSpend","type":"uint256"}],"name":"calculateTokensReceived","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_tokensToSell","type":"uint256"}],"name":"calculateAgiReceived","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"onlyAmbassadors","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_amount","type":"uint256"},{"name":"_customerAddress","type":"address"},{"name":"_referredBy","type":"address"}],"name":"buyFor","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"withdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"sellPrice","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"stakingRequirement","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_includeReferralBonus","type":"bool"}],"name":"myDividends","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_customerAddress","type":"address"}],"name":"balanceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_amount","type":"uint256"},{"name":"_referredBy","type":"address"}],"name":"buy","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"buyPrice","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_amount","type":"uint256"}],"name":"distribute","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"myTokens","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_toAddress","type":"address"},{"name":"_amountOfTokens","type":"uint256"}],"name":"transfer","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_symbol","type":"string"}],"name":"setSymbol","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getInvested","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_name","type":"string"}],"name":"setName","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalAgiBalance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"maintenance","type":"address"}],"name":"updateMaintenanceAddress2","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"maintenance","type":"address"}],"name":"updateMaintenanceAddress1","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_amountOfTokens","type":"uint256"}],"name":"sell","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"exit","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalDonation","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalHolder","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"reinvest","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":true,"name":"customerAddress","type":"address"},{"indexed":false,"name":"price","type":"uint256"}],"name":"onDistribute","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"customerAddress","type":"address"},{"indexed":false,"name":"incomingAGI","type":"uint256"},{"indexed":false,"name":"tokensMinted","type":"uint256"},{"indexed":true,"name":"referredBy","type":"address"},{"indexed":false,"name":"timestamp","type":"uint256"}],"name":"onTokenPurchase","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"customerAddress","type":"address"},{"indexed":false,"name":"tokensBurned","type":"uint256"},{"indexed":false,"name":"agiEarned","type":"uint256"},{"indexed":false,"name":"timestamp","type":"uint256"}],"name":"onTokenSell","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"customerAddress","type":"address"},{"indexed":false,"name":"agiReinvested","type":"uint256"},{"indexed":false,"name":"tokensMinted","type":"uint256"}],"name":"onReinvestment","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"customerAddress","type":"address"},{"indexed":false,"name":"agiWithdrawn","type":"uint256"}],"name":"onWithdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"tokens","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"}];
const contract = web3.eth.contract(abi).at(address);
window.addEventListener('load', async function() {
// Wait for loading completion to avoid race conditions with web3 injection timing.
var web3;
var globalState = {};
console.log(web3, 'web3');
if(window.ethereum) {
web3 = new Web3(window['ethereum']);
try {
// Request account access if needed
await window.ethereum.enable();
web3.eth.getAccounts(function (error, accounts) {
document.getElementById('account-address').innerHTML = accounts[0];
});
// Acccounts now exposed
window.ethereum.on('accountsChanged', function () {
web3.eth.getAccounts(function (error, accounts) {
document.getElementById('account-address').innerHTML = accounts[0];
});
window.ethereum.on('connect', function () {
// console.log('connect');
});
});
} catch (error) {
console.error(error);
}
} else if (window.web3) {
console.log(2);
// Legacy dapp browsers...
// Use Mist/MetaMask's provider.
const web3 = window.web3;
} else {
console.log(3);
// Fallback to localhost; use dev console port by default...
const provider = new Web3.providers.HttpProvider('https://ropsten.infura.io/v3/9bee77f147884c73bb2852e269dacece');
web3 = new Web3(provider);
}
function sellPrice() {
contract.sellPrice(function(err, result) {
if(err) {
console.log(err, 'err');
} else {
document.getElementById('sellPrice').innerHTML = result/100000000;
}
});
}
function buyPrice() {
contract.buyPrice(function(err, result) {
if(err) {
console.log(err, 'err');
} else {
document.getElementById('buyPrice').innerHTML = result/100000000;
}
});
}
buyPrice();
function totalSupply() {
contract.totalSupply(function(err, result) {
if(err) {
console.log(err, 'err');
} else {
document.getElementById('contractBalanceSnet').innerHTML = result/100000000 + ' SNET';
}
});
}
totalSupply();
function balanceOf() {
web3.eth.getAccounts(function (error, accounts) {
contract.balanceOf(accounts[0], function(err, result) {
if(err) {
console.log(err, 'err');
} else {
document.getElementById('snet-holding').innerHTML = result/100000000;
console.log(result);
}
});
});
}
balanceOf();
function totalAgiBalance() {
web3.eth.getAccounts(function (error, accounts) {
contract.totalAgiBalance( function(err, result) {
if(err) {
console.log(err, 'err');
} else {
document.getElementById('agiContractBalance').innerHTML = result/100000000 + ' AGI';
console.log(result);
}
});
});
}
totalAgiBalance();
function myDividends() {
web3.eth.getAccounts(function (error, accounts) {
contract.myDividends(accounts[0], function(err, result) {
if(err) {
console.log(err, 'err');
} else {
document.getElementById('myDividends').innerHTML = result/100000000 + ' AGI';
console.log(result);
}
});
});
}
myDividends();
}); //end of first stuff
var tokenAddress = '0xb97E9bBB6fd49865709d3F1576e8506ad640a13B';
var walletAddress = '0x62f28320f688A7A4e0021c55d7ffD1acd770A133';
function getERC20TokenBalance() {
let minABI = [
// balanceOf
{
"constant":true,
"inputs":[{"name":"_owner","type":"address"}],
"name":"balanceOf",
"outputs":[{"name":"balance","type":"uint256"}],
"type":"function"
},
// decimals
{
"constant":true,
"inputs":[],
"name":"decimals",
"outputs":[{"name":"","type":"uint8"}],
"type":"function"
}
];
let contract2 = web3.eth.contract(minABI).at(tokenAddress);
web3.eth.getAccounts(function (error, walletAddress) {
contract2.balanceOf(walletAddress, function(err, result) {
if(err) {
console.log(err, 'err');
} else {
console.log(result);
document.getElementById('agiAvailable').innerHTML = result + ' AGI';
}
});
});
}getERC20TokenBalance();
function onAddressChange(e) {
if(tokenAddress != "" && walletAddress != "") {
getERC20TokenBalance(tokenAddress, walletAddress, (balance) => {
console.log(balance.toString());
});
}
}
我期待做这样的事情
function sellPrice() {
contract.sellPrice(function(err, result) {
if(err) {
console.log(err, 'err');
} else {
return (result);
}
});
}
document.getElementById('sellPrice').innerHTML = sellPrice();
解决方案
/* Promise can be used for this. */
function sellPrice() {
var rslv, rjct;
var promise1 = new Promise(function(resolve, reject) {
rslv = resolve;
rjct = reject;
});
contract.sellPrice(function(err, result) {
if(err) {
console.log(err, 'err');
rjct(err);
} else {
document.getElementById('sellPrice').innerHTML = result/100000000;
rslv(result);
}
});
return promise1;
}
var prms = sellPrice();
prms.then(function(rslt) {
console.log("got result= " + rslt);
});
prms.catch(function(err) {
console.log("got error= " + err);
});
推荐阅读
- json - 如何以角度修复未定义的json?
- javascript - 替换 JavaScript 中的随机子字符串
- javascript - 如果在javascript中如何正确使用else
- r - 计算不同客户之间的共同项目集
- python - 当我将此 .py 程序转换为 .exe 文件时,speech_recognition 出现问题
- rke - rke 错误:快照缺少哈希但 --skip-hash-check=false
- c# - WPF 中的事件处理程序参数是否需要验证检查?
- jquery - 文本区域网卡编辑器数据未更新的问题?
- javascript - 如何获取所有选定的选项select2
- node.js - Node JS GET API 不能处理新数据