使用Node.js回调并返回

时间:2018-03-07 05:24:15

标签: javascript node.js mongoose callback

我在这里遇到了一个问题,我希望将我的功能单独保存(在文件中)以获得更简洁的代码。

在我的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;
        }
    });
}

我希望获得付款的返回值或错误作为路线中被叫函数的返回值。

我该如何做到这一点?

2 个答案:

答案 0 :(得分:3)

让我们退后一步,考虑一下功能如何运作的基础知识。

让我们假设你写了这个函数:

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
}

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

答案 1 :(得分: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
        }
    });
}