Лучший подход к обратным вызовам для асинхронных вызовов функций в условиях - PullRequest
0 голосов
/ 04 января 2019

Я хотел бы знать, что, по вашему мнению, является более элегантным способом обработки общего кода, выполняемого после условного синхронного вызова функции.

Например, предположим, что есть функция, которая обрабатывает «идентифицировать и сортировать фигуры от самых маленьких до самых больших». В зависимости от результата условия (например, «является ли форма для поиска треугольника или круга?»), Может быть выполнена одна из двух разных асинхронных функций (предположим в моем примере, что по какой-то причине логика не может быть объединена в одна функция):

  1. Найти все фигуры, которые являются треугольником
  2. Найти все фигуры, которые являются кругом

В зависимости от результата выполнения одной из двух функций (в зависимости от условия) должен быть выполнен следующий раздел кода. Эта логика (называемая «сортировать фигуры») предполагается одинаковой независимо от того, является ли искомая фигура треугольником или кругом.

Если бы я использовал обратные вызовы, я бы разделил код после вызовов 1 и 2 выше, на отдельную выделенную функцию «сортировки фигур», которая была бы таким же обратным вызовом, например:

function identifyAndSortShapes() {

if (searchingForShape === TRIANGLE)
   findTriangleShapes(sortShapes) // sortShapes is the common callback
else
   findCircleShapes(sortShapes)

... // The common code that would have been here is then moved to a
... // separate (callback) function sortShapes, due to the asynchronous
... // functions sharing the same callback logic
}

function findTriangleShapes(callback) {
... // Some asynchronous operation, e.g. DB query
callback()
}

function findCircleShapes(callback) {
... // Some asynchronous operation, e.g. DB query
callback()
}

function sortShapes() {
...
}

Но является ли эта практика (разделение кода, который я оставил бы внутри функции identifyAndSortShapes, на отдельную функцию обратного вызова sortShapes) правильным путем? Или есть более элегантный способ обработать этот условный асинхронный вызов функции, а затем получить одинаковый код обратного вызова для обоих без создания отдельной функции?

Извинения, как мой пример абстракции, возможно, не лучший выбор, но я думаю, что это показывает мою текущую проблему. Я полагаю, что это может быть основной концептуальный подход (о том, как правильно структурировать асинхронный код), поэтому я с нетерпением жду вашего совета, который может помочь мне пролить свет на это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...