我有一个函数,我在node.js apis中链接到我的回调函数。在第一次写这篇文章时,我们没有任何情况下它也会被单独调用或作为链接回调的第一种方法。所以我们就像下面这样写了
processResults: (data, res, cb) => (error, response, body) => { // dostuff
// with response and process it
}
现在当调用processResults的场景作为回调链的第一个方法到达时,我们就像下面那样做了
app.post('/results, (req,res)=> {
// call process results
ctl.processResults(req.body,res,terminalCb)***()*** ;
// () these seem to be wierd
})
令我惊讶的是它有效,现在我真的很困惑这个魔法是如何发生的,而且我觉得这不是正确的程序编写技巧。我真的需要帮助。如果有人可以解释或建议正确的编码方式,或者这是正确的方法,那么为什么呢? 请帮忙。
答案 0 :(得分:1)
你只是在没有参数的情况下调用内部函数:(错误,响应,正文)都将是未定义的,但允许这样做是正确的,因为它可以调用{只有一个参数而不是三个参数{1}}。
但是,正如你所说,如果内部函数与arr.forEach(elm =>
相符,它就会按照你输入代码的方式工作,因为response
将是未定义的。但是会定义response
,因为你确实将它作为参数传递给外部函数。
如果您可以直接提供对默认函数的访问,而不是仅具有返回函数的函数,那将是很好的,如下所示:
res
你仍然拥有丑陋的const ctl = {
processResults: (data, res, cb) => (error, response, body) => { // dostuff
// with response and process it
}
}
ctl.processOne = function(data, res, cb) {
return ctl1.processResults.call(this, ...arguments)();
}
,但它在你与之交互的对象后面被抽象出来。