如何检查在Javascript中作为参数传递的回调函数是否有参数?

如何检查在Javascript中作为参数传递的回调函数是否有参数?,javascript,node.js,callback,javascript-objects,Javascript,Node.js,Callback,Javascript Objects,我必须这么做 doSomething .then(success) .catch(failure); 成功和失败是回调函数,它们将在运行时获得它们的值(我正在尝试编写一个模块) 所以我必须知道作为回调发送的函数failure应该有一个参数 因为回调应该是这样的 function(error) { // An error happened } JS中是否有这样做的方法?或者任何使这种检查成为可能的图书馆 编辑 我只是想澄清一下。我希望使用我的模块的用户(不是最终用户)将函数作为

我必须这么做

doSomething
    .then(success)
    .catch(failure);
成功和失败是回调函数,它们将在运行时获得它们的值(我正在尝试编写一个模块)

所以我必须知道作为回调发送的函数failure应该有一个参数

因为回调应该是这样的

function(error) {
// An error happened
}
JS中是否有这样做的方法?或者任何使这种检查成为可能的图书馆

编辑


我只是想澄清一下。我希望使用我的模块的用户(不是最终用户)将函数作为参数发送进来,该参数将成为回调函数,我希望检查发送的函数(将被回调)是否具有足够的所需参数。我知道这取决于使用它的人。但是为什么不试试呢?

调用方强制执行回调函数的某些参数可能是一种反模式,但是如果必须,您可以检查函数的
长度:

函数测试(){}
函数test1(a){}
函数test2(a,b){}
log(test.length、test1.length、test2.length)
使用承诺回调(您的
then
catch
处理程序),调用它们时将只传递一个参数,并且始终传递该参数。(如果承诺遵守本机语义;jQuery的
延迟
并不总是如此。)

在一般情况下:

通常你不在乎,因为在JavaScript中,你可以用更少或更多的参数来调用一个函数。也就是说,这很好:

函数foo(a){ console.log(“a=“+a”); } foo();//参数比参数少 foo(1,2,3);//参数多于参数
我需要知道作为回调发送的函数是否应该有一个参数

您需要阅读将回调发送到的函数的文档。它将提到如何(何时、多久以及使用什么参数)调用回调

对于您的
故障
,这意味着要阅读文档(假设
doSomething
是本机承诺)。它说,当承诺被拒绝时,回调将被一个参数调用,即拒绝原因

或者任何使这种检查成为可能的图书馆


您可以使用类型检查器,当您传递的函数没有预期数量的参数时,它会向您发出警告或抛出错误。

每个函数中都有一个
arguments
数组,您可以使用该数组来确定是否设置了任何参数,这是您想要的吗?您为什么需要知道这一点?提供该功能的人对其行为负责。如果他们不想定义参数,就不应该影响您的代码。更广泛地说,如果您希望编译时类型安全,JS有静态类型检查器,但这似乎远远超出了这个问题的关注范围……您使用的一些术语令人困惑。有时听起来您想验证从其他人收到的回调,而有时听起来您想知道应该在自己的回调上定义哪些参数。你从两个角度都得到了答案。太好了!我不知道长度。另外,
foo.length
可以是
0
,因为它是在没有参数列表的情况下定义的,并且函数仍然需要通过
参数
对象获得参数。如果这有道理的话。英语,grrr@易卜拉欣·赫里尔:德拉特,我想说的是——现在就可以了,谢谢!(是的,这在英语中是有意义的。:-)这里的英语怎么了?让我有点