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
ловить синхронные исключения.