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);    
        }
    });    
});

希望对您有所帮助...