Почему я могу ожидать выполнения решения об обещании, а не об отказе от обещания? - PullRequest
1 голос
/ 03 февраля 2020

Я играл с обещаниями и нашел странное поведение. Почему это обещание ожидается, когда я жду звонка resolve, а не когда я жду звонка reject?

(async () => {
    let resolve, reject;
    const promise = new Promise((_resolve, _reject) => {
        resolve = _resolve;
        reject = _reject;
    });
    promise.then(_ => console.log('Promise resolved'));
    await resolve(); // Instead of "resolve(); await promise;", which would be more natural
    console.log('Thread still running');
})()

(async () => {
    let resolve, reject;
    const promise = new Promise((_resolve, _reject) => {
        resolve = _resolve;
        reject = _reject;
    });
    await reject(); // Instead of "reject(); await promise;", which would be more natural
    console.log('Thread still running');
})()

1 Ответ

1 голос
/ 03 февраля 2020

Вы можете только с пользой await обещание.

resolve возвращает undefined. reject возвращает undefined. Ничто из этого не является обещанием, поэтому await не имеет практического эффекта.

(async() => {
  let resolve, reject;
  const promise = new Promise((_resolve, _reject) => {
    resolve = _resolve;
    reject = _reject;
  });
  promise.then(_ => console.log('Promise 1 resolved'));
  const resolve_return_value = resolve();
  console.log({
    resolve_return_value
  });
  await resolve_return_value;
  console.log('Thread 1 still running');
})();

(async() => {
  let resolve, reject;
  const promise = new Promise((_resolve, _reject) => {
    resolve = _resolve;
    reject = _reject;
  });
  const reject_return_value = reject();
  console.log({
    reject_return_value
  });
  await reject_return_value;
  console.log('Thread 2 still running');
})();

Когда вы передаете функцию конструктору Promise, ей дается два аргумента, которые являются функциями, которые позволяют вам разрешить или отклонить , которое обещает .

Не путайте их с Promise.reject() и Promise.resolve(), которые возвращают новые обещания, которые немедленно отклоняются или разрешаются.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...