Выполнение операторов после успешного асинхронного запроса в блоке try / catch - PullRequest
0 голосов
/ 29 сентября 2018

Я пытаюсь понять, почему оператор console.log не будет выводить на терминал после успешного асинхронного сетевого запроса.Я понимаю, почему он не будет выполнен, если запрос потерпит неудачу, так как выполнение перейдет к блоку catch.Однако после выполнения успешного запроса я не вижу следов оператора ведения журнала.У меня есть следующий код:

function processRequest (url, res) {
    return axios.get(url).then(response => {
        res.send({status: 'PASS', message: `${response.status}, on ${url}`});
    });
}

app.post('/api', async (req, res) => {
    let response;
    try {
        response = await processRequest(someValidURL, res);
        console.log('after request'); //this statement does not show up after successful request
    } catch (error) {
      console.error(error);
    }

}

Чтобы свести этот пост к минимуму, я не включил операторы require для библиотек express и axios, а также код экспресс-настройки.Любая помощь приветствуется.

1 Ответ

0 голосов
/ 29 сентября 2018

Это потому, что вы возвращаете ответ из processRequest, что означает, что обработка вашего запроса завершена и ответ отправлен.

Чтобы добиться того, что вы пытаетесь сделать, вы должны сделать это следующим образомэто

function processRequest (url) {
    return axios.get(url);
}

app.post('/api', async (req, res) => {
    let response;
    try {
        response = await processRequest(someValidURL);
        console.log('after request', response);
        res.send({status: 'PASS', message: `${response.status}, on ${url}`}); 
    } catch (error) {
      console.error(error);
        res.send({status: 'ERROR'});
    }
}
...