Dima 的办法让人产生的了熟悉的感到,Node 的回调中不是经常都如许写吗?
所以这个办法真的很有意思。不过回过火来想一想,这段代码中每当碰到缺点,都是将缺点消息经由过程 cb() 调用推出去,同时中断后续过程。像这种中断式的缺点处理,其拭魅正合适采取 try-catch。
我没有批驳 Dima 的缺点处理方法,这个缺点处理方法很好,很相符 Node 缺点处理的风格,也必定会受到很多人的爱好。因为 Dima 的缺点处理方法给带灵感,同时也让我再次核阅了一向比较爱好的 try-catch 方法。
应用 try-catch 改写膳绫擎的代码
要用 try-catch 改写膳绫擎的代码,起重要去掉落 to() 封装。如许,一旦产生缺点,须要应用 Promise.prototype.catch() 进行捕获,或者应用 try-catch 对 await promise 语句进行捕获。捕获到的,当然是每个营业代率攀里 reject 出来的 err。
然而留意,膳绫擎的代码中并没有直接应用 err,而是应用了自定义的缺点消息。所以须要对 reject 出来的 err 进一步处理成指定的缺点消息。当然这难不到谁,比如
- someAsync().catch(err => Project.reject("specified message"));
然后再最外层加上 try-catch 就好。所以改写之后的代码是:
- async function asyncTask(cb) {
- try {
- const user = await UserModel.findById(1)
- .catch(err => Promise.reject("No user found"));
- const savedTask = await TaskModel({ userId: user.id, name: "Demo Task" })
- .catch(err => Promise.reject("Error occurred while saving task"));
- if (user.notificationsEnabled) {
- await NotificationService.sendNotification(user.id, "Task Created")
- .catch(err => Promise.reject("Error while sending notification"));
- }
- cb(null, savedTask);
- } catch (err) {
- cb(err);
- }
推荐阅读
2016年冬,我在一家创虻公司的小团队里搞软件开辟。彼时我们有一位真实的企业客户,且软件的第一版也已宣布。开辟按进度落成,在宣布时我欣喜若狂,也异常骄傲,看着体系办事于天天几百万>>>详细阅读
本文标题:从不用try-catch实现的async/await语法来说说错误处理
地址:http://www.17bianji.com/lsqh/38423.html
1/2 1