SetTimeout с Promise.resolve не выводит строку, а числовое значение строки, почему? - PullRequest
0 голосов
/ 30 октября 2018

Я пытаюсь использовать метод setTimeout с форматом Promise.resolve. Я думаю, что я близок к тому, чтобы получить это, но я не получаю то, что ожидал в своей консоли.

const good = Promise.resolve(setTimeout(() => 'success', 4000));
console.log(good);

//prints '51' instead of 'success'

Я думаю, что «51» - это числовое значение успеха. Если я прав, мне интересно, почему он печатает вместо строки isteald, если она в кавычках.

Заранее благодарю за помощь!

Редактировать: Чтобы уточнить, это был вызов, данный мне инструктором Удеми. Я спрашивал, почему мой конкретный код не работает, а не ответы.

Это вызов:

const success = new Promise((resolve, reject) => {
         if (true) {
             setTimeout(resolve, 4000, 'success')
         } else {
             reject('error it broke')
         }
     });

    success 
        .then (() => console.log('success!'))


3. Read about Promise.resolve() and Promise.reject(). How can you make 
the above promise shorter with Promise.resolve() and console log "success"

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

Надеюсь, это поможет прояснить ситуацию

Ответы [ 2 ]

0 голосов
/ 30 октября 2018

Обещания не возвращают явное значение. Он возвращает либо разрешенный, либо отклоненный объект обещания. Посмотрите на асинхронные операции с JS больше. А пока попробуйте

good.then(expectedGoodValue => console.log(expectedGoodValue));

Если вы хотите определить добро, вам придется сделать это в блоке then обещания. Однако будьте осторожны, если вы попытаетесь использовать добро вне обещания, оно может вернуться неопределенным.

var good;

new  Promise.resolve(setTimeout(() => 'success', 4000))
.then(value => 
{
  good = value;
})
.then(() =>
{
  //some other operation
  console.log(good); //Won't be undefined
});


console.log(good); //More than likely will be undefined. This line may be hit before the async resolves
0 голосов
/ 30 октября 2018

setTimeout() не "просто работает" с обещаниями. Вы должны разрешить обещание со строковым значением, как это, и записать свой вывод в .then():

const good = new Promise(resolve => {
  setTimeout(resolve, 4000, 'success');
});

good.then(result => {
  console.log(result);
});
...