@kuronokey

Цепочка промисов не выводит в консоль?

Вот есть такой простой код на промисах. Что я ожидаю? Ожидаю, что при вызове промиса, выведется окошко в которе если ввести число больше 9 - промис завершится успешно, и в КОНСОЛЬ НЕМЕДЛЕННО ОТПРАВИТСЯ значение, которое ввели. А затем второй раз запустится промис.
На деле же запускается промис, потом ещё раз, и только ПОСЛЕ этого выводятся сразу 2 числа.
Как поправить код что бы после отрабатывания промиса он выводил число?
И чего он ждёт? Они же должны сразу срабатывать и возвращать результат

function serverTalk () {

    var myInnerServerTalk =  new Promise ( function (resolve,reject) {

        do {
            var zn = prompt ('digit');
        } while (isNaN(zn))
       
        if (zn > 9) {
            resolve(zn);
        }
        else {
            reject (zn);
        }

    }
    )

return  myInnerServerTalk;

}

// Запускаю  цепочку
serverTalk().then (
function resolve (zsn) {console.log(zsn)}
).then (
serverTalk ().then ( function resolve (zsn) {console.log(zsn)} )
  )
  • Вопрос задан
  • 108 просмотров
Решения вопроса 1
rockon404
@rockon404
Frontend Developer
Правильно это делается так:
serverTalk().then(console.log).then(serverTalk).then(console.log);

Вы же, в своем коде передаете второй раз вызов serverTalk, а не саму функцию или колбек с вызовом, поэтому она срабатывает сразу же за первым вызовом.
Ваш вариант можно исправить так:
serverTalk().then(function(result) {
  console.log(result);
}).then(function() {
  return serverTalk();
}).then(function(result) {
  console.log(result);
});

или, если используете ES6, так:
serverTalk()
  .then(result => console.log(result))
  .then(() =>serverTalk())
  .then(result => console.log(result));

Но, в данном случае, лучше использовать самый первый вариант.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы