Использование массива функций в node.js работает нормально, но ожидание не ждет?

Я пытаюсь использовать массив функций для выполнения соответствующей функции на основе переданного значения:

const functions = {
  VALUE_1: async function (body, context) {
    await alertEventService.receivedValue1(body, context)
  },
  VALUE_2: async function (body, context) {
    await alertEventService.receivedValue2(body, context)
  },
  VALUE_3: async function (body, context) {
    await alertEventService.receivedValue3(body, context)
  },
  VALUE_4: async function (body, context) {
    await alertEventService.receivedValue4(body, context)
  },
}

Я вызываю функцию так:

router.post('/system/', auth.required, async function (req, res) {
      try {
        let response_def = await functions[`${req.body.event_type}`](req.body, req.context) // This await does not seem to wait! 
        if (response_def) {
          res.status(response_def)
        } else {
          res.status(400).send(`Something went wrong with the system message`)
        }
      } catch (error) {
        log.error(error)
        res.status(500).send(error)
      }
})

Проблема в том, что response_def всегда не определен, когда он попадает в оператор if, и поэтому код всегда возвращает статус 400, даже если запрос выполнен успешно.

Я внимательно проверил весь код вызываемой функции, и все работает правильно.

Кроме не ожидания, все работает нормально. Я возвращаю 204 из вызванной функции.

Мы будем благодарны за любые идеи. Я не хочу использовать переключатель!

Всего 1 ответ


response_def не определен, потому что вы ничего не возвращаете.

Вместо этого вы должны написать это

const functions = {
  VALUE_1: async function (body, context) {
    return await alertEventService.receivedValue1(body, context)
  },
  VALUE_2: async function (body, context) {
    return await alertEventService.receivedValue2(body, context)
  },
  VALUE_3: async function (body, context) {
    return await alertEventService.receivedValue3(body, context)
  },
  VALUE_4: async function (body, context) {
    return await alertEventService.receivedValue4(body, context)
  },
}

обратите внимание, что последнее ожидание не обязательно, равно как и асинхронный, это тоже должно работать, но менее явно

const functions = {
  VALUE_1(body, context) {
    return alertEventService.receivedValue1(body, context)
  },
  VALUE_2(body, context) {
    return alertEventService.receivedValue2(body, context)
  },
  VALUE_3(body, context) {
    return alertEventService.receivedValue3(body, context)
  },
  VALUE_4(body, context) {
    return alertEventService.receivedValue4(body, context)
  },
}

Есть идеи?

10000