Почему эта программа завершает работу, прежде чем вызвать мое предложение "then"? - PullRequest
0 голосов
/ 21 апреля 2020

Когда я отправил этот простой вызов запроса-обещания API, я не получил никакого ответа. Может кто-нибудь сказать мне, почему это не работает?

var request = require('request-promise');
var options = {
    uri: 'https://jsonplaceholder.typicode.com/todos/1',
    headers: {
        'User-Agent': 'Request-Promise'
    },
    json: true
};

request(options)
.then(function (success) {
    console.log(success);
})
.catch(function (error) {
    console.log('noob!');
})

Он переходит к строке «request (options)», пропускает ОБА и успех и неудачу и просто выходит из программы. Что дает?!

1 Ответ

1 голос
/ 21 апреля 2020

Как и в ответе на предыдущий вопрос , вы используете Обещание, которое гарантированно пропустит запрос и ответ. Передав эти два function s, вы предлагаете обратные вызовы среды выполнения (предположительно Node), которые он может вызвать после успешного завершения запроса. Поскольку вы обращаетесь к удаленному серверу, это займет некоторое время, обычно за десятки или сотни миллисекунд.

Если вы не укажете Node в противном случае, он завершится, когда достигнет конца вашего скрипта , Возможно, библиотека не успеет вызвать ваш обратный вызов. Как и в этом NodeJS выпуске , вы можете использовать функцию await верхнего уровня, которая приостанавливает выполнение вашей программы для ожидания обратного вызова.

try {
  let success = await request(options);
  console.log(success);
} catch (error) {
  console.log('noob!');
}

См. Также: Узел завершается без ошибки и не ожидает обещания (обратный вызов события)

...