当前位置: 首页 > 后端技术 > Node.js

nodejs执行js文件和命令行输入的区别

时间:2023-04-03 23:10:14 Node.js

这里是一个nodejs文件,内容是将编译好的sol文件部署到testrpc下面是文件内容:web3=require('web3');web3=newWeb3(newWeb3.providers.HttpProvider("http://localhost:8545"));web3.personal.newAccount('abc');//新建一个账户,用来存放转账手续费//testrpc有3个账户,这是第四个;coinContract=web3.eth.contract(abiInfo);deployed=coinContract.new(300000000,1,web3.eth.accounts[3],{data:byteCode,from:web3.eth.accounts[0],gas:3000000});console.log(deployed.address);//提示undefined在终端执行js文件$nodedeploy_contract.js结果undefined同理在node命令行单行输入以上代码得到deployed.address值(不是未定义)$node>Web3=require('web3');>web3=newWeb3(newWeb3.providers.HttpProvider("http://localhost:8545"));>web3.personal.newAccount('abc');//创建一个新账户,用于存储转账fee...这里的问题困扰了我两个晚上。后来发现是nodejs异步函数的问题。最好做一个回调处理。deployed=coinContract.new(300000000,1,web3.eth.accounts[3],{data:byteCode,from:web3.eth.accounts[0],gas:3000000});console.log(deployed.address);这里是异步函数,因为没有加入回调处理,导致deployed.address是undefined,如果进行其他操作,比如:transfer,也会出错。但是在node命令行下,单行输入意味着异步函数执行,直到进程完成。一旦直接执行js文件,就会出现异步函数执行的问题。下面是如何使用它:deployed=coinContract.new(300000000,1,web3.eth.accounts[3],{from:web3.eth.accounts[0],data:byteCode,gas:3000000},function(err,coinContract){if(!err){if(!coinContract.address){console.log("无法获取部署地址");}else{console.log("获取部署地址");//dosomething}}else{console.log(err);}});这里加了一个回调函数function(err,coinContract),但是还是会提示Cannotgetthedeployaddress(我还没想好),然后提示Getthedeployaddress。