【发布时间】:2023-04-11 03:51:01
【问题描述】:
我正在尝试编写一个包装器,以便可以删除分布在不同文件中的重复代码。我有几个工人需要参数列表和回调。如果某些条件为真,它会调用其他服务并使用结果调用回调,否则使用空数组调用回调。
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 [];
}
【问题讨论】:
标签: javascript callback async.js