Я пытаюсь написать оболочку, чтобы я мог удалить дублирующийся код, распространяющийся между различными файлами.У меня есть пара рабочих, которая принимает список параметров и обратный вызов.Если какое-либо условие выполняется, оно вызывает другую службу и вызывает обратный вызов с результатом, в противном случае выполняется обратный вызов с пустым массивом.
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 [];
}