使用 Node.js 回调和返回

Posted

技术标签:

【中文标题】使用 Node.js 回调和返回【英文标题】:Callback and return with Node.js 【发布时间】:2018-08-15 03:05:06 【问题描述】:

我在这里遇到了一个问题,我想将我的函数分开(在文件中)保存,以获得更整洁的代码。

在我的 Route.js 中,我正在调用这样的函数:

app.post('/pay', function(req, res)
    User.getPaypal(function(output) 
        console.log(output) //i am not getting this result(output)
    )
)

函数导出到另一个文件如下:

module.exports.getPaypal = function()
    var create_payment_json= 
        //some values
    ;

    paypal.payment.create(create_payment_json, function (err, payment) 
        if (err) 
            return err;
         else 
             return payment;
        
    );

我想得到一个payment或err的返回值作为路由中被调用函数的返回。

我怎样才能做到这一点?

【问题讨论】:

你在console.log(output)得到了什么? 我其实是想得到payment的返回值。 【参考方案1】:

让我们退后一步,考虑一下函数如何工作的基础知识。

假设您编写了函数:

function double () 
    var x = 1;
    return x * 2;

那你称它为

var y = double(100);

你看到y 是 2 而不是 200?

你觉得这有什么问题?

如果您说您已声明 double 不接受争论,那您是对的。解决方法是:

function double (x) 
    return x * 2;

现在让我们看看你的函数:

var getPaypal = function () 
    /** for now it does not matter what's here **/

现在您将函数调用为:

function mycallback (output) 
    console.log(output);


getPaypal(mycallback);

我希望你看看哪里出了问题。很明显,您已将函数声明为:

function getPaypal() 

当你想要的是:

function getPaypal(anotherFunction) 

现在,如何将结果传递给回调函数?简单,就这么叫吧:

function getPaypal(anotherFunction) 
    /** some processing **/

    anotherFunction(result); // this is how you pass the result to the callback

回调与数字、字符串或数组没有什么不同。它只是传递给你的函数的东西。

【讨论】:

【参考方案2】:

你应该从了解callback的概念开始,它基于closure的概念

至于您的问题,您缺少使用传递的回调函数。应该是这样的

module.exports.getPaypal = function(callback) //callback argument was missing
    var create_payment_json= 
        //some values
    ;

    paypal.payment.create(create_payment_json, function (err, payment) 
        if (err) 
            callback(undefined, err); // callback function being invoked
         else 
            callback(payment, undefined); // would be better if you have two arguments to callback first for result second for error
        
    );

【讨论】:

以上是关于使用 Node.js 回调和返回的主要内容,如果未能解决你的问题,请参考以下文章

Node.js学习四 Node.js回调函数

Node.js 回调函数

Node.js:如何从回调中正确返回对象?

node js 回调函数

Node.js 回调函数

Node.js 回调函数