TypeScript/javascript 中的链式与非链式 Promise 处理

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

我有一个简单的代码,其中调用了异步函数。 Promise 与 .then().catch() 链接在一起。当 Promise 被拒绝时,它会按预期打印

Came to catch block 
Async operation succeeded

async function exampleAsyncFunction() {
  try {
    const someAsyncOperationP = someAsyncOperation().then(
        () => console.log(`Came to then block`))
      .catch(() => console.log(`Came to catch block`));
    const result = await someAsyncOperationP;
    console.log('Async operation succeeded:', result);
  } catch (error) {
    console.error('Async operation failed:', error);
  }
}

async function someAsyncOperation(): Promise < number > {
  return new Promise < number > ((resolve, reject) => {
    reject(new Error('Random error occurred'));
  });
}

// Call the async function
exampleAsyncFunction();

但是,如果我稍微将此代码更改为以下代码,将 Promise 分配给 const,然后将 .then().catch() 附加到它,那么我会看到它转到

Async operation failed: Error: Random error occurred
块,然后看到
Came to catch block
线。

async function exampleAsyncFunction() {
  try {
    const someAsyncOperationP = someAsyncOperation();
    someAsyncOperationP.then(
        () => console.log(`Came to then block`))
      .catch(() => console.log(`Came to catch block`));
    const result = await someAsyncOperationP;
    console.log('Async operation succeeded:', result);
  } catch (error) {
    console.error('Async operation failed:', error);
  }
}

async function someAsyncOperation(): Promise < number > {
  return new Promise < number > ((resolve, reject) => {
    reject(new Error('Random error occurred'));
  });
}

// Call the async function
exampleAsyncFunction();

我希望这两个代码块具有相同的行为。为什么我们会看到这种差异?

javascript typescript asynchronous promise
1个回答
0
投票

在第二种情况下,Promise 已经得到解决。引发错误的原因是:

someAsyncOperationP.then(
        ()=>console.log(`Came to then block`))
        .catch(()=>console.log(`Came to catch block`));
      const result = await someAsyncOperationP;

具体:

const result = await someAsyncOperationP;
© www.soinside.com 2019 - 2024. All rights reserved.