资讯专栏INFORMATION COLUMN

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

孙淑建 / 1193人阅读

摘要:这里有一个文件,内容是部署编译好的文件到上下面是该文件的内容在终端中执行该文件结果是同样,将上面的代码在命令行中单行下输入就能获得的值非这里的问题困扰了我两个晚上,后来发现是异步函数问题。

这里有一个nodejs文件,内容是部署编译好的sol文件到testrpc上
下面是该文件的内容:
Web3 = require("web3");
web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8545"));
web3.personal.newAccount("abc");//create a new account,used to store transfer fee
//testrpc has 3 acccounts,this is the 4th.
fs = require("fs");
json_file = fs.readFileSync("dapp.json");
dapp_info = JSON.parse(json_file);
abiInfo = dapp_info.contractABI;
byteCode = dapp_info.contractBYTE;
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);//prompt undefined
在终端中node执行该js文件

$node deploy_contract.js
结果是
undefined

同样,将上面的代码在node命令行中单行下输入就能获得deployed.address的值(非undefined)
$node
>Web3 = require("web3");
>web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8545"));
>web3.personal.newAccount("abc");//create a new account,used to store transfer fee
...
这里的问题困扰了我两个晚上,后来发现是nodejs异步函数问题。
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("Cannot get the deploy address");
    }
    else
    {
        console.log("Get the deploy address");
        //do something
    }
}
else
{
    console.log(err);
}});
这里加了一个回调函数function(err, coinContract),但是仍然会提示Cannot get the deploy address(这个暂时我也没搞清楚),然后提示Get the deploy address

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/23994.html

相关文章

  • 造轮子之 npm i -g creatshare-app-init 源码浅析

    摘要:刚刚在里说明的回调函数绑定在命令下。使用开源协议源代码都放在目录下目录要对不同的代码进行合理的分层。,我是韩亦乐,现任本科软工男一枚。 以我的小经验来看,软件萌新写出来的代码大多无法直视。具体现象包括空格和换行符乱用、文件夹和变量的命名多使用拼音等。坐不住的我,便想到了通过 ESLint 配置文件来规范实验室的 JavaScript 代码规范的 Idea。 于是巧遇前实验室毕业学长曾经...

    adie 评论0 收藏0
  • PHP命令行下世界

    摘要:命令行参数详解查看的所有命令行参数,使用命令。我们将会对大部分常用的命令行参数进行一一解释,以加深对能力的认识,更加快捷的在服务端命令行下使用或者调试各种因为对环境不熟悉而出现的问题。 PHP作为一门web开发语言,通常情况下我们都是在Web Server中运行PHP,使用浏览器访问,因此很少关注其命令行操作以及相关参数的使用,但是,特别是在类Unix操作系统上,PHP可以作为一门脚本...

    calx 评论0 收藏0
  • node.js简单爬虫

    这里假设你已经安装好node.js和npm,如果没有安装,请参阅其他教程安装。 配置首先是来配置package.json文件,这里使用express,request和cheerio。 package.json如下: { name: node-scrape, version: 0.0.1, description: Scrape, main: server.js, depende...

    tinylcy 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<