Я хотел бы сделать условный асинхронный вызов функции в JavaScript / ES5.
Скажем, у меня есть модуль myService
с функцией myAsyncFunction
, которая выполняет некоторую логику внутри и возвращает результат с обратным вызовом, как показано ниже:
myService.myAsyncFunction(param1, param2, (error, success) => {
if (error) {
// handle error
return;
}
// handle success
});
Но в определенных условиях мне бы хотелось, чтобы он напрямую попадал в «дескриптор успеха» без запуска логики внутри myService.myAsyncFunction
, что может занять некоторое время и ресурсы.
Самый простой способ, который я представляю, - создать фиктивную функцию, которая имитирует myService.myAsyncFunction
и вызывает обратный вызов без ошибок, как показано ниже:
var myGenericFunction;
if ( /* I would like to skip unnecessary logic */) {
myGenericFunction = function (param1, param2, callback) {
callback(null);
}
} else {
myGenericFunction = myService.myAsyncFunction;
}
myGenericFunction(param1, param2, (error, success) => {
if (error) {
// handle error
return;
}
// handle success
});
Это то, чем я закончил, но я думаю, что должен быть лучший способ с точки зрения как синтаксиса, так и производительности. Есть ли у вас какие-либо предложения для этого?
Примечание: Promise.resolve
на ES6 может предложить решение, которое напрямую попадет в успех, но мне интересно, каким будет решение ES5.