async函数中的可选参数

optional parameters in an async function

本文关键字:参数 函数 async      更新时间:2023-09-26

如何在回调的异步函数中有可选参数?

例如,这是我的呼叫:

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"