如何在异步/等待语法中使用 Promise.prototype.finally()?

Posted

技术标签:

【中文标题】如何在异步/等待语法中使用 Promise.prototype.finally()?【英文标题】:How to use Promise.prototype.finally() in async/await syntax? 【发布时间】:2018-10-26 15:40:27 【问题描述】:

实际上我的主要问题是在async/await ES8 语法中使用Promise.prototype.catch(),毫无疑问Promise.prototype.then() 存在于async/await 语法的本质中。

我在async/await 中搜索了有关使用Promise.prototype.catch() 的信息,发现:

async () => 
  try 
    const result1 = await firstAsynchronousFunction();
    const result2 = await secondAsynchronousFunction(result1);
    console.log(result2);
   catch(err) 
    throw new Error(`Something failed`);
  

而且我绝对知道Promise 链接,例如:

new Promise((resolve) => 
  console.log(`Initial`);
  resolve();
)
.then(() => 
  console.log(`Task Number One`);
)
.catch(() => 
  console.log(`Task in Error`);
)
.finally(() => 
  console.log(`All Tasks is Done`);
)

所以,我的问题是如何在async/await 语法中使用finally

【问题讨论】:

【参考方案1】:

这应该可行:

async () => 
  try 
    const result1 = await firstAsynchronousFunction();
    const result2 = await secondAsynchronousFunction(result1);
    console.log(result2);
   catch(err) 
    throw new Error(`Something failed`);
   finally 
    console.log(`All Tasks is Done`);
  

【讨论】:

以上是关于如何在异步/等待语法中使用 Promise.prototype.finally()?的主要内容,如果未能解决你的问题,请参考以下文章

React-Router:如何在路由转换之前等待异步操作

如何使用回调在任何函数中调用异步等待方法

如何在“react-dropzone”的“onDrop”中使用异步等待? (解析错误:不能在异步函数之外使用关键字'await')

如何在 Javascript 中使用异步等待函数对象?

如何使用异步等待处理多个异常

如何使用异步等待 [重复]