如何在带回调的异步函数中使用可选参数?
例如,这是我的电话:
func1(param1, param2, param3, param4, param5, param6, function(err, data) {
.
.
.
}
在这里我想让param5和param6可选;
module.exports.func1= function(param1, param2, param3, param4, param5, param6, callback) {
.
.
.
}
我想简单的方法是看它们是否未定义,如果是,我们设置默认值;这是唯一的方法吗?
由于
答案 0 :(得分:1)
使用"参数"函数内部的属性知道它的长度(你有多少个参数)。最后一个是回调函数,其他是param1,param2等......
更新:我举了一个例子(可以改进逻辑) http://jsfiddle.net/4gda1sdw/
function func1() {
var arg_lenght = Array.prototype.slice.call(arguments, 0).length -1;
var args = Array.prototype.slice.call(arguments, 0, arg_lenght);
var cb = Array.prototype.slice.call(arguments, 0)[arg_lenght];
alert(args);
alert(cb);
}
func1(1, 2, 3, 4, function() {});
答案 1 :(得分:0)
基本上,您必须检查它们是否未定义。一个很好的处理方法是使用这样的模式:
function func1(a, b, c, d, e, callback) {
a = a || 'use';
b = b || 'short';
c = c || 'circuiting';
d = d || 'for';
e = e || 'defaults';
callback = callback || function(){};
...
}
因为undefined
评估为" falsy"它将在右侧获取结果,因此在分配合理的默认值时会自动检查undefined。
如果您想完全避免插入默认参数,那么您可以使用arguments
对象。
function func1(a, b, c, d, e, callback) {
for (var i = 0, len = arguments.length; i < len; i++) {
if (typeof arguments[i] === 'function') {
callback = arguments[i];
break;
}
}
// Fill in defaults here
}
答案 2 :(得分:0)
我知道我有点晚了,但是如果您将单个对象用作参数会更好:
function x(options){
var a = options.a || "optional";
var b = options.b || "optional";
var c = options.c || "optional";
}
x({
a: "foo",
//b: "not set",
c: "bar"
});
如果您可以使用最新版本的JavaScript,则可以编写:
function x({a = "optional", b = "optional", c = "optional"}){
//todo
}
x({
a: "foo",
//b: "not set",
c: "bar"
});
如果未设置参数之一,则为"optional"
。