Javascript 使用异步库使用参数模板化函数
我正在尝试编写一个包装器,以便能够删除散布在不同文件中的重复代码。我有两个工作人员负责获取参数列表和回调。如果某个条件为true,它将调用其他服务并使用结果调用callback,否则将使用空数组调用callbackJavascript 使用异步库使用参数模板化函数,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
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)代码>