Как дождаться асинхронного ответа в Express, прежде чем отвечать на AJAX-запрос? - PullRequest
0 голосов
/ 27 апреля 2019

Я делаю AJAX-вызов на мой сервер Express, который затем должен сделать асинхронный запрос к базе данных.Я попытался использовать await / async, а также дал обещание с .then.

Проблема в том, что мой сервер отвечает автоматически после достижения конца testfunc вместо ожидания обещания или оператора возврата.

В результате пустое значение отправляется обратно клиенту.Есть ли какой-нибудь способ заставить Express подождать с обещанием или возвратом, прежде чем ответить на запрос AJAX?

Ниже приведен пример того, что я пытаюсь.

exports.testFunc = function(){

    var data = []

    asyncCall().then(function () {
        //Populate data array

        return { 'data' : data } 
    })
}

1 Ответ

1 голос
/ 27 апреля 2019

Обработчик должен явно записать в объект экспресс-ответа, когда вы выполнили асинхронную функцию

https://expressjs.com/en/api.html#res

В настоящее время обработчик будет выполнен, а возвращение неявно интерпретируется как завершение ответа. Чего не хватает, так это связи между вашей асинхронной операцией и завершением ответа. Это должно быть обработано через объект экспресс-ответа.

Когда ваша асинхронная операция завершена, вы можете вызвать res.send

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