Обещание решено, все еще показывает ожидание - PullRequest
0 голосов
/ 09 мая 2018
function goodFun(){
    console.log('this is good fun');
}
function badFun(){
    console.log('this is bad fun');
}
const promise = new Promise(goodFun , badFun);
console.log(promise); // status , pending 
promise.then(); // resolved 
console.log(promise); // status , still pending !!! how ??? 
promise.then(); // running same promise twice

Выход:

this is good fun Promise { <pending> } Promise { <pending> }

Как только я выполнил обещание, оно все еще показывает, что оно находится на рассмотрении. и во второй раз, он не печатает содержание "goodFun", может кто-нибудь мне помочь, что я пропускаю?

ОБНОВЛЕНИЕ: Более того, вывод первого файла console.log (обещание) - ПОСЛЕ обещания.then ()? это тоже сбивает с толку? почему это происходит? Сначала он должен вывести консольный вывод, а затем - обещание .then ().

1 Ответ

0 голосов
/ 09 мая 2018

С уважением, это совсем не то, как вы используете обещания. Я предлагаю поработать над некоторыми учебными пособиями, возможно MDN * .

Некоторые проблемы:

  1. Конструктор Promise принимает только один параметр.
  2. Этот параметр должен быть обещанием функция исполнителя , которая принимает хотя бы один, если не два параметра (функции, которые вы использовали бы для разрешения или отклонения обещания).
  3. Вызов then не разрешает обещание.
  4. Звонить then без передачи обратного вызова бессмысленно.

Вот ваш пример (в любом случае, насколько я могу его интерпретировать), обновленный для правильного использования обещаний:

const promise = new Promise(function(resolve, reject) {
  // Often a promise is used with asynchronous operations, so let's use
  // setTimeout to emulate one
  setTimeout(function() {
    // Let's give the promise a ~2 in 3 chance of resolving, a ~1 in 3 chance of rejecting
    if (Math.random() >= 1 / 3) {
      console.log("Resolving the promise");
      resolve();
    } else {
      console.log("Rejecting the promise");
      reject();
    }
  }, 100);
});

function goodFun(){
    console.log('this is good fun');
    // Now it's settled (resolved)
    console.log(2, promise);
}
function badFun(){
    console.log('this is bad fun');
    // Now it's settled (rejected)
    console.log(3, promise);
}

promise.then(goodFun, badFun);

// Not settled (resolved or rejected) yet
console.log(1, promise);
You'll have to look in the real console to see the promise internal state, as it's not available to JavaScript code.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...