使用 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 回调和返回的主要内容,如果未能解决你的问题,请参考以下文章