Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/456.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用异步库使用参数模板化函数_Javascript_Callback_Async.js - Fatal编程技术网

Javascript 使用异步库使用参数模板化函数

Javascript 使用异步库使用参数模板化函数,javascript,callback,async.js,Javascript,Callback,Async.js,我正在尝试编写一个包装器,以便能够删除散布在不同文件中的重复代码。我有两个工作人员负责获取参数列表和回调。如果某个条件为true,它将调用其他服务并使用结果调用callback,否则将使用空数组调用callback Worker1.js ~~~~~~~~~ export function get(shouldCall, param11, param12, callback) { if(shouldCall) { someService.get(param11, param12, ca

我正在尝试编写一个包装器,以便能够删除散布在不同文件中的重复代码。我有两个工作人员负责获取参数列表和回调。如果某个条件为true,它将调用其他服务并使用结果调用callback,否则将使用空数组调用callback

Worker1.js
~~~~~~~~~
export function get(shouldCall, param11, param12, callback) {
  if(shouldCall) {
    someService.get(param11, param12, callback);
  } else {
    callback(null, []);
  }
}

Worker2.js
~~~~~~~~
export function get(shouldCall, param21, callback) {
  if(shouldCall) {
   someOtherService.get(param21, callback);
  } else {
    callback(null, []);
  }
}
这些工人实际上是从收集器调用的,如下所示。我正在使用
async

collector.js
   ~~~~~~~~~~~~
    import async from 'async';

    function doSomething(callback) {
      async.auto({
        worker1Result: async.apply(worker1.get, true, 'abc', 'xyz'),
        worker2Result: async.apply(worker2.get, true, 'mno', 'uvw')
      }, (err, result) => {
        callback(err, result);
      })
    }
我希望从收集器中调用此模板,如下所示:

function doSomething(callback) {
  const serviceOneCall = async.apply(someService.get, param11, param12);
  const serviceTwoCall = async.apply(someService.get, param11, param12);

  async.auto({
    worker1Result: async.apply(template.execute, true, serviceOneCall),
    worker2Result: async.apply(template.execute, true, serviceTwoCall)
  }, (err, result) => {
    callback(err, result);
  })
}
我试过下面这样的模板。问题是我并没有看到将参数传递给服务调用的方法。有什么建议吗

template.js
~~~~~~~~~~~
  export function execute(shouldCall, serviceToCall, callback) {
      if (shouldCall) {
          return serviceToCall();              
      }

      return [];
  }

execute
函数提供额外参数,然后使用解构语法或
apply
方法:

函数execute1(shouldCall、serviceToCall、callback、…args){
如果(应该打电话){
返回serviceToCall(…args);
}
返回[];
}
函数execute2(shouldCall、serviceToCall、回调){
如果(应该打电话){
返回serviceToCall.apply(未定义,Array.prototype.slice.call(参数,3));
}
返回[];
}
execute1(true,console.log.bind(console),null,1,2,3);
execute2(true,console.log.bind(console),null,4,5,6,7)