Node.js Express:在console.log和回调中获得不同的输出

时间:2018-07-16 12:08:24

标签: node.js express call ethereum web3

我在// No conversion: T1 is char, T2 is int Add<char, int>('c', 2) 上部署了一个smart contract,其中包含一个getter函数:

Kovan

如果我通过web3调用该函数,则会在控制台上获得以下输出,这很好!!

function getOrderStatus(uint _orderId) public view returns(bool shipped, bool arrived, bool payed) {
    return (orders[_orderId].shipped, orders[_orderId].arrived, orders[_orderId].payed); 
}

但是,如果我尝试通过Result { '0': false, '1': false, '2': false, shipped: false, arrived: false, payed: false } 转发返回的对象以提供它,例如通过API,我在浏览器上得到以下输出:

callback function

唯一的区别是在以下代码的末尾代替了[object Object] -> console.log(returnValue)

callback(returnValue)

然后通过function getOrderStatus(_orderId, callback) { contractABI.methods.getOrderStatus(_orderId).call() .then(returnValue => callback(returnValue)); }

调用该函数
Express

1 个答案:

答案 0 :(得分:1)

如果您的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);    
        }
    });    
});

希望有帮助...