async函数中的可选参数
optional parameters in an async function
如何在回调的异步函数中有可选参数?
例如,这是我的呼叫:
func1(param1, param2, param3, param4, param5, param6, function(err, data) {
.
.
.
}
这里我想让param5和param6是可选的;
module.exports.func1= function(param1, param2, param3, param4, param5, param6, callback) {
.
.
.
}
我想简单的方法是看看它们是否未定义,如果是,我们设置默认值;这是唯一的办法吗?
谢谢
使用函数内部的"arguments"属性来知道它的长度(你有多少个参数)。最后一个是回调函数,其他的是param1, param2等…
参考:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions_and_function_scope/arguments
更新:我做了一个例子(可以提高逻辑)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() {});
基本上,您必须检查它们是否未定义。处理这个问题的一个好方法是使用类似这样的模式:
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
的计算结果为" false ",它将取右边的结果,所以这将在分配合理的默认值时自动检查未定义。
如果你想避免插入默认参数,那么你可以使用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
}
我知道我有点晚了,但如果你使用单个对象作为参数会更好:
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"
。
相关文章:
- 函数参数中的数据与指定变量之间的任何性能差异
- AngularJS:我可以跳过函数参数回调吗
- 函数未将值作为参数传递
- JS:检查URL中的参数,然后迭代一个参数为var的函数
- 为什么不'我们在javascript中使用函数参数的数据类型
- 你好,这是测试用例,我必须在函数中传递n个参数
- JavaScript - 多参数函数,它是多个图像库的字符串
- 如何从两个参数函数返回随机整数
- 以无点风格在Ramda中编写一个无参数函数
- JS:将单参数函数转换为可链接函数
- 正则表达式类似于Javascript中的参数函数
- 将 $' 值传递给替换的关联参数函数
- "这个“;在参数函数中
- 如何向jquery插件发送参数函数
- 将参数函数Node.js从一个js传递到另一个js
- 如何在javascript参数函数中传递PHP post方法字符串
- 装饰 Javascript Promise.then 以便参数函数接收附加参数
- 正在分析setInterval ID'是的's参数函数
- 如何根据一个参数函数计算年龄
- 对象参数/函数和/或三元运算符混淆