我在这里遇到了一个问题,我希望将我的功能单独保存(在文件中)以获得更简洁的代码。
在我的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;
}
});
}
我希望获得付款的返回值或错误作为路线中被叫函数的返回值。
我该如何做到这一点?
答案 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
}
});
}