Básicamente, estoy tratando de ejecutar un script que inicializa todas las variables que necesitaré durante mi sesión de consola de Node. El guión se ve así:
global.Web3 = require('web3');
global.web3 = new Web3(new
Web3.providers.HttpProvider('http://localhost:8545'));
global.Tx = require('ethereumjs-tx');
global.solc = require('solc');
global.accounts;
web3.eth.getAccounts().then(_accounts => {
accounts = _accounts;
});
require('repl').start({});
Hasta ahora, todo funciona bien, hasta el momento de configurar la variable de cuentas. Ejecutar el script y llamarlo produce lo siguiente:
➜ ethtest node init.js
> accounts
ReferenceError: accounts is not defined
at repl:1:1
at ContextifyScript.Script.runInContext (vm.js:35:29)
at REPLServer.defaultEval (repl.js:342:29)
at bound (domain.js:280:14)
at REPLServer.runBound [as eval] (domain.js:293:12)
at REPLServer.<anonymous> (repl.js:539:10)
at emitOne (events.js:96:13)
at REPLServer.emit (events.js:188:7)
at REPLServer.Interface._onLine (readline.js:232:10)
at REPLServer.Interface._line (readline.js:583:8)
Estoy bastante seguro de que estoy malinterpretando algo simple, pero hasta ahora, no he podido resolverlo. Cualquier ayuda sería muy apreciada. ¡Gracias!
Tienes una condición de carrera donde require('repl').start({});
corre antes de accounts = _accounts;
correr. Esto se debe a que web3.eth.getAccounts()
se ejecuta de forma asíncrona. Lo que deberías tener en su lugar es
web3.eth.getAccounts().then(_accounts => { accounts = _accounts; require('repl').start({}); });