在某些库/框架文档中,它告诉您可以使用同步或异步函数。
例如,在Mongoose documentation中说:
自定义验证器也可以是异步的。如果验证器函数有2个参数,mongoose将假设第二个参数是回调。
所以基本上定义一个这样的函数:
function(a){
return false;
}
Mongoose会将其视为同步,但我们将其定义为:
function(a,callback){
setTimeout(function(){
callback(false);
},5000)
}
它将被视为异步代码。
我注意到Mocha testing framework的相同内容,在文档中说:
使用Mocha测试异步代码并不简单!只需在测试完成后调用回调。通过向它()添加回调(通常名为done),Mocha将知道它应该等待调用此函数来完成测试。
我的问题是:他们是如何做到的?你怎么知道在调用函数时是否需要1或2个参数?
答案 0 :(得分:6)
你只需检查参数
function something(arg1, arg2) {
if (typeof arg2 === 'function') {
console.log(arg1 + ' has callback');
} else {
console.log(arg1 + ' does not have callback');
}
}
something('call 1'); // no callback
something('call 2', function() {}); // has callback
要检查函数期望的参数数量,可以使用Function.length
length
是函数对象的属性,表示有多少个属性 函数期望的参数,即形式参数的数量。 此数字不包括rest参数,仅包含参数 在第一个具有默认值之前。相比之下, arguments.length是函数的本地,并提供了数量 参数实际传递给函数。
console.log((function() {}).length); /* 0 */
console.log((function(a) {}).length); /* 1 */
console.log((function(a, b) {}).length); /* 2 etc. */
答案 1 :(得分:4)
他们是如何做到的?你怎么知道在调用函数时是否需要1或2个参数?
您可以使用functionname.length
来解决这个问题。
function some(a,b,c){
return false;
}
function somethingElse(a){
return false;
}
some.length //returns 3.
somethingElse.length //returns 1.
答案 2 :(得分:0)
var func= function(a,b){
}
console.log(func.length);