Grundsätzlich versuche ich, ein Skript auszuführen, das alle Variablen initialisiert, die ich während meiner Node-Konsolensitzung benötige. Das Skript sieht so aus:
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({});
Bisher funktioniert alles einwandfrei, bis es an der Zeit ist, die Kontenvariable zu setzen. Das Ausführen und Aufrufen des Skripts erzeugt Folgendes:
➜ 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)
Ich bin mir ziemlich sicher, dass ich etwas Einfaches falsch verstehe, aber bisher konnte ich es nicht herausfinden. Jede Hilfe wäre sehr willkommen. Danke!
Sie haben eine Rennbedingung, bei der require('repl').start({});
Läufe vor accounts = _accounts;
Läufen laufen. Dies liegt daran, dass web3.eth.getAccounts()
asynchron ausgeführt wird. Was Sie stattdessen haben sollten, ist
web3.eth.getAccounts().then(_accounts => { accounts = _accounts; require('repl').start({}); });