我有一个简单的代码,其中调用了异步函数。 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();
我希望这两个代码块具有相同的行为。为什么我们会看到这种差异?
在第二种情况下,Promise 已经得到解决。引发错误的原因是:
someAsyncOperationP.then(
()=>console.log(`Came to then block`))
.catch(()=>console.log(`Came to catch block`));
const result = await someAsyncOperationP;
具体:
const result = await someAsyncOperationP;