栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

我应该在异步函数中引发错误还是返回被拒绝的承诺?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

我应该在异步函数中引发错误还是返回被拒绝的承诺?

他们是正确的。

调用

myCustomFunction
假定始终都会返回一个承诺(
.then
并分别
.catch
处理已解决和拒绝的承诺)。当您引发错误时,该函数不会返回promise。

可以 使用它来捕获错误:

try {  myModule.myCustomFunction(someInput).then(result => {    // carry on  })  .catch(err => {    // do something with the error  })} catch(err) {  ...}

但正如您所看到的,这将导致两个错误处理程序:

try/catch
同步引发的错误,以及可能返回的
.catch
任何被拒绝的承诺
sns.createTopic(someParams)

这就是为什么最好使用

Promise.reject()

module.exports.myCustomFunction = input => {    if (badInput) {        return Promise.reject('failed');    }    return sns.createTopic(someParams).promise()}

然后,

.catch
将捕获两种类型的错误/拒绝。

注意:对于较新版本的Node.js(我认为v7.6及更高版本),以下内容也将起作用:

module.exports.myCustomFunction = async input => {    if (badInput) {        throw new Error('failed');    }    return sns.createTopic(someParams).promise()}

这里的关键是

async
关键字。通过使用此关键字,函数结果将自动由Promise包装(类似于@peteb的答案所示)。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/436702.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号