JavaScript обещает, разрешить, отклонить - PullRequest
1 голос
/ 09 июня 2019

Так что мне было интересно, что происходит с ответом, и отвергаю объект обещания.Я читал эту документацию И есть вещи, которые мне не совсем понятны.

Например, что это за объект resolve().

Я видел, что эта вещь может быть внутри строки, а затем запускается resolve()?Что происходит и какой смысл в этом

var promise1 = new Promise(function(resolve, reject) {
  setTimeout(function() {
    resolve('foo');
  }, 300);
});

Сначала я думал, что функция / объект разрешения запускается всякий раз, когда функция обратного вызова возвращает значение, а затем может перейти к .then()

Так что я какое-то время играл с этой штукой, и оказалось, что моя теория с решимостью по возвращению работает в 50% случаев, остальные 50% разрушают мой разум.

Также отказобъект / функция, как запустить его, если, скажем, результат функции равен 0, но это должно быть 1, чтобы я мог продолжить?

var promise1 = new Promise(function(resolve, reject) {
   if(someFunction() === 0)
   {
     reject();
   } else {
     resolve()
   }
});

Этот код работает только в том случае, если внутри моего someFunction() у меня нет асинхронных функций, и, если он у меня есть, он всегда возвращает неопределенное значение.

Так что доэта точка суть понятия обещания и его использования мне совершенно неясна.

1 Ответ

1 голос
/ 09 июня 2019

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

В случае, если вы появились, значение вернуло свое 'foo'

Даже если функция не имеет такой функции, это эквивалентно функции, возвращающей что-то.Таким образом, с этой точки зрения все хорошо.

Тот факт, что она не работает, когда функция обратного вызова имеет какой-либо фрагмент асинхронного кода, просто потому, что, как вы сказали, она возвращает undefined.Функция не закончила работу, поэтому она возвращает это.Это не ждет этого.Самое простое решение, которое я могу придумать, чтобы решить обе ваши проблемы, это передать объект разрешения и отклонения в функцию обратного вызова и запустить их изнутри

Например,

var promise1 = new Promise(function(resolve, reject) {
   someFunction(resolve,reject);
});

function someFunction(resolve,reject){
  var i = 0;
  setTimeout(function() {
    if(i===0){
      reject(/**You can even pass it some variables here if u wanted*/);
    } else {
      resolve(/**Same here*/); // this should work just fine and it will sucesfully launch .then with whatever u need returned 
    }
  }, 300);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...