Javascript回调两个函数

时间:2018-01-18 18:13:57

标签: javascript ecmascript-6 callback

有没有办法用Javascript(ES6)实现代码?

如果是,我该怎么办?我试试这个例子,但它不起作用。

const funcA = (callback, arg1) => {
  console.log("Print arg1: " + arg1); /* Print arg1: argument1 */
  let x = 0;
  x = callback(x, );
  return x;
}

const funcB = (x, prefix) => {
  console.log("Print prefix: " + prefix); /* Print prefix: PREFIX_ */
  x = x + 1;
  return x;
}

/* Exec function funcA */
let x = funcA(funcB( ,"PREFIX_"), "argument1");
console.log("Value of x: " + x); /* Value of x: 1 */

3 个答案:

答案 0 :(得分:2)

这是一种定义占位符作为符号的方法,用于标识尚未设置的参数。

它有一个this对象,它绑定到调用函数以进一步检查和评估。

如果arguments objectthis.arg的组合数组不再有placeholder项,则使用参数调用该函数并返回函数调用。

如果没有,新的参数数组将绑定到函数并返回。

  

[?]表示占位符符号

 funcB    x    prefix       this.args        args       action
-------  ---  ---------  -------------  --------------  ------------------------------
1. call  [?]  "PREFIX_"                 [?], "PREFIX_"  return calling fn w/ bound args
2. call   0      [?]     [?], "PREFIX_"  0,  "PREFIX_"  return fn call with args
3. call   0   "PREFIX_"                                 return 1

(当然它可能会更短一些并委托给另一个功能,但它是一个概念证明。)



function funcA(callback, arg1) {
    console.log('funcA', callback, arg1)
    return callback(0, placeholder);
}

function funcB(x, prefix) {
    var args = this && this.args || [],
        temp = Array.from(arguments);

    console.log('funcB', isPlaceholder(x) ? '[?]' : x, isPlaceholder(prefix) ? '[?]' : prefix);

    // placeholder part
    if (temp.some(isPlaceholder)) {
        temp.forEach((a, i) => isPlaceholder(a) && i in args || (args[i] = a));
        return args.some(isPlaceholder)
            ? funcB.bind({ args })
            : funcB(...args);
    }

    // origin function body
    return x + 1;
}

const
    placeholder = Symbol('placeholder'),
    isPlaceholder = v => v === placeholder;

console.log("Value of x: " + funcA(funcB(placeholder, "PREFIX_"), "argument1"));




答案 1 :(得分:1)

js中尚无法进行部分申请。您需要另一个充当回调的箭头函数:

funcA(x => funcB(x ,"PREFIX_"), "argument1");

要求您不需要额外的逗号:

x = callback(x)

this proposal可能允许写这个:

 funcA( funcB(?, "PREFIX_"), "argument1")

答案 2 :(得分:-1)

一种方法是定义一个默认参数,该参数是传递给node.default["postgresql"]["version"] = "9.3" node.default["postgresql"]["dir"] = "/etc/postgresql/9.3/main" node.default["postgresql"]["client"]["packages"] = ["postgresql-client-9.3", "libpq-dev"] node.default["postgresql"]["server"]["packages"] = ["postgresql-9.3"] node.default["postgresql"]["contrib"]["packages"] = ["postgresql-contrib-9.3" 的第一个参数的函数,并在调用funcA时使用var定义x < / p>

funcA