Nodejs Express:在 console.log 和回调中获得不同的输出
Nodejs Express: Getting different output in console.log and callback
我在 Kovan
上部署了一个 smart contract
,其中包含一个 getter 函数:
function getOrderStatus(uint _orderId) public view returns(bool shipped, bool arrived, bool payed) {
return (orders[_orderId].shipped, orders[_orderId].arrived, orders[_orderId].payed);
}
如果我通过 web3 调用该函数,我会在控制台上得到以下输出,这很好!:
Result {
'0': false,
'1': false,
'2': false,
shipped: false,
arrived: false,
payed: false }
但是如果我尝试通过 callback function
转发返回的对象以提供它,例如通过 API,我在浏览器上得到以下输出:
[object Object]
唯一的区别是下面代码末尾的 console.log(returnValue)
--> callback(returnValue)
:
function getOrderStatus(_orderId, callback) {
contractABI.methods.getOrderStatus(_orderId).call()
.then(returnValue => callback(returnValue));
}
然后通过 Express
调用函数
app.get('/api/getOrderStatus', function(req, res) {
orderId = req.query.orderId;
getOrderStatus(orderId, function(error, data) {
if (!error) {
res.send(data);
}
else
{
res.send(error);
}
});
});
如果你的getOrderStatus()
函数是这样的:
function getOrderStatus(_orderId, callback) {
contractABI.methods.getOrderStatus(_orderId).call()
.then(returnValue => callback(returnValue));
}
...那么你的结果在returnValue
,对吧?如果您随后像上面描述的那样调用 callback
函数,那么第一个参数就是您的数据。
在您的路线中,您在第一个参数处使用 error
参数调用回调,所以我想应该是这样的:
app.get('/api/getOrderStatus', function(req, res) {
orderId = req.query.orderId;
getOrderStatus(orderId, function(data, error) { // <--- changed order of parameters
if (!error) {
res.json(data);
} else {
res.send(error);
}
});
});
希望对您有所帮助...
我在 Kovan
上部署了一个 smart contract
,其中包含一个 getter 函数:
function getOrderStatus(uint _orderId) public view returns(bool shipped, bool arrived, bool payed) {
return (orders[_orderId].shipped, orders[_orderId].arrived, orders[_orderId].payed);
}
如果我通过 web3 调用该函数,我会在控制台上得到以下输出,这很好!:
Result {
'0': false,
'1': false,
'2': false,
shipped: false,
arrived: false,
payed: false }
但是如果我尝试通过 callback function
转发返回的对象以提供它,例如通过 API,我在浏览器上得到以下输出:
[object Object]
唯一的区别是下面代码末尾的 console.log(returnValue)
--> callback(returnValue)
:
function getOrderStatus(_orderId, callback) {
contractABI.methods.getOrderStatus(_orderId).call()
.then(returnValue => callback(returnValue));
}
然后通过 Express
app.get('/api/getOrderStatus', function(req, res) {
orderId = req.query.orderId;
getOrderStatus(orderId, function(error, data) {
if (!error) {
res.send(data);
}
else
{
res.send(error);
}
});
});
如果你的getOrderStatus()
函数是这样的:
function getOrderStatus(_orderId, callback) {
contractABI.methods.getOrderStatus(_orderId).call()
.then(returnValue => callback(returnValue));
}
...那么你的结果在returnValue
,对吧?如果您随后像上面描述的那样调用 callback
函数,那么第一个参数就是您的数据。
在您的路线中,您在第一个参数处使用 error
参数调用回调,所以我想应该是这样的:
app.get('/api/getOrderStatus', function(req, res) {
orderId = req.query.orderId;
getOrderStatus(orderId, function(data, error) { // <--- changed order of parameters
if (!error) {
res.json(data);
} else {
res.send(error);
}
});
});
希望对您有所帮助...