A simple npm package to help you Promisify your Web3 calls that requires a callback
When you try to do function calls (such as from Metamask) such as
var balance = web3.eth.getBalance(yourEthAddress);
You will get the following error
Uncaught Error: The MetaMask Web3 object does not support synchronous methods like eth_getBalance without a callback parameter.
This package allows you to get around the callback requirements by wrapping your functions into a Promise
.
This allows you to avoid what Javascript developers like to call as callback hell
npm install --save promisify-smart-contract-func
import promisifySmartContractFunc from 'promisify-smart-contract-func';
Reminder - the parameters that promisifySmartContractFunc
take are
<function name>, <parameter 1>, <parameter 2>, ......
import promisifySmartContractFunc from 'promisify-smart-contract-func';
.
.
.
try {
const balance = await promisifySmartContractFunc(
web3.eth.getBalance, // Function
address // Parameters
);
const approveTransactionHash = await promisifySmartContractFunc(
token.approve, // Function
contractAddress, amount // Parameters
);
if (approveTransactionHash) {
console.log(balance);
console.log(approveTransactionHash);
// Do something
}
} catch (error) {
console.error(error);
throw(error);
}
web3.eth.getBalance(address, (error1, balance) => {
contract.tokensDeposited(contractAddress, (error2, approveTransactionHash) => {
if (approveTransactionHash) {
console.log(balance);
console.log(approveTransactionHash);
// Do something ...
}
if (error2) {
console.error(error2);
throw(error2);
}
});
if (error1) {
// Do something ...
console.error(error1);
throw(error1);
}
});
import promisifySmartContractFunc from 'promisify-smart-contract-func';
.
.
.
try {
const tokenDeposited = await promisifySmartContractFunc(contract.tokensDeposited);
console.log(tokenDeposited)
} catch (error) {
console.error(error);
throw(error);
}
contract.tokensDeposited((error, value) => {
if (value) {
// Do something ...
}
if (error) {
// Do something ...
}
});