Nodejs return 函数的结果是空的承诺
Nodejs return result from function is empty promise
我正在尝试使用 Nodejs tron 库创建一对钱包地址,这是我的代码:
app.js
var app = require('express')()
var http = require('http').createServer(app)
var wallet_engine = require('./function')
app.get('/', function (req, res) {
result = wallet_engine.create_wallet_trx()
console.log(result)
res.send(result)
})
//////server listen
http.listen(8443, function () {
console.log('listening on *:8443')
})
这是我的 function.js
module.exports = {
create_wallet_trx: function () {
////////generate TRX Address
var { HdTronPayments } = require('@faast/tron-payments')
var keys = HdTronPayments.generateNewKeys()
var tronPayments = new HdTronPayments({ hdKey: keys.xprv })
var address = tronPayments.getPayport(356)
var privateKey = tronPayments.getPrivateKey(356)
var trx_wallet = { privateKey: privateKey, address: address }
console.log(trx_wallet)
return trx_wallet
},
}
问题是当我检查 console.log(trx_wallet) 结果在那里,我可以看到生成的 public 和私钥,同样在返回数据后,console.log(result) 正在显示数据,但 res.send(result) 显示为空 json.
这是 console.log() 结果
{
privateKey: Promise {
'B88BB56DAB80DB681765A0C07197DD23BB8E2FAD195BF9D0ECD09F5F8FC54297'
},
address: Promise { { address: 'TYCJSKERHReUXacw9wLorZYLDoijevvsVK' } }
}
这是我浏览器上的结果:
{"privateKey":{},"address":{}}
我知道这是因为 Nodejs 异步系统,我应该等待 promise 获取值,但我不知道如何等待 promise 完成,然后在我的浏览器屏幕上打印结果。
你做得很好,但这里有很多调用是异步的,这让你面临问题。
你应该像我下面那样使用 async await or then
它可能对你有帮助..
// app js
var app = require('express')()
var http = require('http').createServer(app)
var wallet_engine = require('./function')
app.get('/', function (req, res) {
result = wallet_engine.create_wallet_trx().then(data=>{
res.json(data);
}).catch(err=>{
console.log(err);
})
})
//////server listen
http.listen(8443, function () {
console.log('listening on *:8443')
})
// function.js
var { HdTronPayments } = require('@faast/tron-payments')
module.exports = {
create_wallet_trx: async function () {
var keys = await HdTronPayments.generateNewKeys()
var tronPayments = await new HdTronPayments({ hdKey: keys.xprv })
var address = await tronPayments.getPayport(356)
var privateKey = await tronPayments.getPrivateKey(356)
var trx_wallet = { privateKey: privateKey, address: address }
return trx_wallet
}
}
结果:{"privateKey":"92ACAECFE00E9F90E330A6B031F10365F29AFDD503922CC99CA8704F1BA53432","address":{"address":"TGfsHx4VU6B36AwUy8Bqt6edoNnUHpMtSQ"}}
我正在尝试使用 Nodejs tron 库创建一对钱包地址,这是我的代码:
app.js
var app = require('express')()
var http = require('http').createServer(app)
var wallet_engine = require('./function')
app.get('/', function (req, res) {
result = wallet_engine.create_wallet_trx()
console.log(result)
res.send(result)
})
//////server listen
http.listen(8443, function () {
console.log('listening on *:8443')
})
这是我的 function.js
module.exports = {
create_wallet_trx: function () {
////////generate TRX Address
var { HdTronPayments } = require('@faast/tron-payments')
var keys = HdTronPayments.generateNewKeys()
var tronPayments = new HdTronPayments({ hdKey: keys.xprv })
var address = tronPayments.getPayport(356)
var privateKey = tronPayments.getPrivateKey(356)
var trx_wallet = { privateKey: privateKey, address: address }
console.log(trx_wallet)
return trx_wallet
},
}
问题是当我检查 console.log(trx_wallet) 结果在那里,我可以看到生成的 public 和私钥,同样在返回数据后,console.log(result) 正在显示数据,但 res.send(result) 显示为空 json.
这是 console.log() 结果
{
privateKey: Promise {
'B88BB56DAB80DB681765A0C07197DD23BB8E2FAD195BF9D0ECD09F5F8FC54297'
},
address: Promise { { address: 'TYCJSKERHReUXacw9wLorZYLDoijevvsVK' } }
}
这是我浏览器上的结果:
{"privateKey":{},"address":{}}
我知道这是因为 Nodejs 异步系统,我应该等待 promise 获取值,但我不知道如何等待 promise 完成,然后在我的浏览器屏幕上打印结果。
你做得很好,但这里有很多调用是异步的,这让你面临问题。
你应该像我下面那样使用 async await or then
它可能对你有帮助..
// app js
var app = require('express')()
var http = require('http').createServer(app)
var wallet_engine = require('./function')
app.get('/', function (req, res) {
result = wallet_engine.create_wallet_trx().then(data=>{
res.json(data);
}).catch(err=>{
console.log(err);
})
})
//////server listen
http.listen(8443, function () {
console.log('listening on *:8443')
})
// function.js
var { HdTronPayments } = require('@faast/tron-payments')
module.exports = {
create_wallet_trx: async function () {
var keys = await HdTronPayments.generateNewKeys()
var tronPayments = await new HdTronPayments({ hdKey: keys.xprv })
var address = await tronPayments.getPayport(356)
var privateKey = await tronPayments.getPrivateKey(356)
var trx_wallet = { privateKey: privateKey, address: address }
return trx_wallet
}
}
结果:{"privateKey":"92ACAECFE00E9F90E330A6B031F10365F29AFDD503922CC99CA8704F1BA53432","address":{"address":"TGfsHx4VU6B36AwUy8Bqt6edoNnUHpMtSQ"}}