NodeJS объединяет функции синхронизации и асинхронной цепочки с

У меня есть основная функция, которая используется для выполнения определенного запроса и анализа ответа. Первым шагом в этой функции является проверка параметров, заданных для этой функции. Затем я сгенерирую запрос, подпишу его и отправлю. Наконец, я буду обрабатывать ответ.

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

return this.validateQueryAttributes(attributes)
  .then(generateQuery)
  .then(signQuery)
  .then(sendQuery)
  .then(handleResponse);

Проблема в том, что первая функция не возвращает обещание. Поэтому я не могу связать это с другими функциями с помощью then, поскольку шаблон then ожидает получить обещание. Кроме того, у меня есть функция.catch на один уровень выше, которую я хочу использовать для определения условий ошибок, которые могут возникнуть в любой из тех функций, которые я вызываю. Если бы я не связывал первую функцию с остальными, ошибки, возникающие в первой функции, не были бы обнаружены?

1 ответ

Решение

Ты можешь использовать Promise.resolve() начать цепочку обещаний, а затем использовать синхронные (и, возможно, бросающие) функции как then обработчики:

return Promise.resolve(attributes)
  .then(this.validateQueryAttributes) // you might need .bind(this)
  .then(generateQuery)
  .then(signQuery)
  .then(sendQuery)
  .then(handleResponse);

Кроме того, если вы используете библиотеку, такую ​​как Bluebird, вы также можете использовать Promise.tryили же Promise.method ловить синхронные исключения.

Другие вопросы по тегам