4

In truffle console I am executing the following statement,

result = token.balanceOf(accounts[1])

This statement returns the following output.

<BN: 8ac7230489e80000>

As suggested here, I am trying to use toNumber() and toString. But I am getting the following error.

result = token.balanceOf(accounts[1])
result.toString()
output: '[object Promise]'
result.toNumber()
TypeError: result.toNumber is not a function
TylerH
  • 20,799
  • 66
  • 75
  • 101
sel
  • 169
  • 5
  • 13
  • 1
    You are receiving back a promise. Can you try `await`ing or using `.then` to extract the real value? – Saddy Jan 12 '21 at 19:27
  • 1
    In addition to @Saddy's comment: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise – kosmos Jan 12 '21 at 19:29

2 Answers2

6

Based on the output it seems you get a Promise. At the moment of running the "result.toString()" command - it's still a promise that haven't been fulfilled yet.

As @Saddy mentioned in the comment, You need to wait for the promise to be fulfilled before you could use the toString() method on its value.

You should add "await" prior to the method.

See the example in truffle documentation (https://www.trufflesuite.com/docs/truffle/quickstart):

Check the metacoin balance of the account that deployed the contract:

truffle(development)> let balance = await instance.getBalance(accounts[0])
truffle(development)> balance.toNumber()
Ofir Baruch
  • 10,323
  • 2
  • 26
  • 39
1

like @Saddy mentioned you can do await for the promise to resolve as shown by @Ofir or do then as shown below.

truffle(development)> await instance.getBalance(accounts[0]).then(b => { return b.toNumber() })
Jimson James
  • 2,937
  • 6
  • 43
  • 78