膳绫擎这段代码,大年夜代码量上来说,并没有比 Dima 的代码削减了若干工作量,只是去掉落了大年夜量 if (err) {} 构造。不习惯应用 try-catch 的法度榜样员找找不到中断点,但习惯了 try-catch 的法度榜样员都知道,营业过程一一旦产生缺点(异步代率攀里指 reject),代码就会跳到 catch 块去处理 reject 出来的值。
- if (err) return cb(err);
而用 try-catch 的模式,就简零丁了
- async function asyncTask(cb) {
- try {
- const user = await UserModel.findById(1);
- const savedTask = await TaskModel({ userId: user.id, name: "Demo Task" });
- if (user.notificationsEnabled) {
- await NotificationService.sendNotification(user.id, "Task Created");
- }
- cb(null, savedTask);
- } catch (err) {
- cb(err);
- }
- }
持续改进
用函数表达式改良 try-catch 逻辑
当然还有改进的空间,比如 try {} 块中的代码比较长,会造成浏览不太便利,try-catch 的逻辑有被“割断”的感到。这种情况下可以应用函数表达式来改良
- async function asyncTask(cb) {
- async function process() {
- const user = await UserModel.findById(1);
- const savedTask = await TaskModel({ userId: user.id, name: "Demo Task" });
- if (user.notificationsEnabled) {
- await NotificationService.sendNotification(user.id, "Task Created");
- }
- return savedTask;
- }
- try {
- cb(null, await process());
- } catch (err) {
- cb(err);
- }
- }
如不雅对缺点的处理代码比较长,也可以写成零丁的函数表达式。
如不雅过程中每一步的缺点处理逻辑不合怎么办
如不雅产生缺点,不再转换为缺点消息,而是特定的缺点处理逻辑,怎么办?
思虑一下,我们用字符串来表示缺点消息,今后可以经由过程 console.log() 来处理处理。而逻辑,最合适的表示当然是函数表达式,最终可以经由过程调用来进行同一处理
推荐阅读
2016年冬,我在一家创虻公司的小团队里搞软件开辟。彼时我们有一位真实的企业客户,且软件的第一版也已宣布。开辟按进度落成,在宣布时我欣喜若狂,也异常骄傲,看着体系办事于天天几百万>>>详细阅读
本文标题:从不用try-catch实现的async/await语法来说说错误处理
地址:http://www.17bianji.com/lsqh/38423.html
1/2 1