为什么我要等待一个诺言解决执行,但一个诺言却不拒绝一个执行?

问题描述 投票:1回答:1

我一直在兑现承诺,并且发现了一种奇怪的行为。为什么当我等待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');
})()
javascript promise
1个回答
0
投票

您只能有用地await一个承诺。

resolve返回undefinedreject返回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构造函数时,会得到两个参数,它们是允许您解析或拒绝that promise的函数。

不要将它们与返回new的诺言立即被拒绝或解决的Promise.reject()Promise.resolve()混淆。

© www.soinside.com 2019 - 2024. All rights reserved.