@Urukhayy

Как «обойти» асинхронность в данном примере?

По GET запросу нужно получать из MongoDB данные и отправить их ответом.
Следующий пример кода выдаёт ошибку, при вызове res.send() из callback:

app.get("/", function(req, res) {
      res.send("Hello"); // Данный вызов выполняется
      collection.find().toArray(function(err, items) {
		res.send("Hello 2"); // Данный вызов не выполняется (Неизвестный метод send)
	});
});
  • Вопрос задан
  • 536 просмотров
Решения вопроса 1
@Faliah
Ваш первый res.send отправляет все заголовки и тело, что завершает вес процесс запрос-ответ и закрывает возможность использовать текущий объект res для отправки чего-либо. В данном случае вам нужно убрать из кода первый вызов res.send и вы получите "Hello 2". Никаих обходов асинхронности, глобальных переменных и прочего вам не нужно. Переменная res будет и так доступна внутри коллбэка, если вы не перекрываете её где-то в области видимости.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
SPAHI4
@SPAHI4
реактовцы - это не девы, а прокидыватели пропсов
Используйте koa
router.get('/', async ctx => {
  ctx.body = await collection.find().toArray(); // при условии, что это вернет promise
});
Ответ написан
Комментировать
Rou1997
@Rou1997
Дело в том ,что вы в функцию function(err, items) не передаете res, обойти двумя способами, первый - простой - объявить глобально, нарушив всю асинхронность анонимных функций, а второй - правильный, как здесь для XMLHttp.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы