js中Async/Await 怎么做错误处理更好?

2021-09-18  本文已影响0人  Small_Song

await等待处理的是一个Promise协议,那么利用以下这种方式将错误导出至同一个逻辑层再处理就能不用写那么多try/catch了。

// to.js
export default function to(promise) {  
   return promise.then(data => {
      return [null, data];
   })
   .catch(err => [err]);
}

import to from './to.js';
async function asyncTask(cb) {  
     let err, user, savedTask;

     [err, user] = await to(UserModel.findById(1));
     if(!user) return cb('No user found');

     [err, savedTask] = await to(TaskModel({userId: user.id, name: 'Demo Task'}));
     if(err) return cb('Error occurred while saving task');

    if(user.notificationsEnabled) {
       const [err] = await to(NotificationService.sendNotification(user.id, 'Task Created'));  
       if(err) return cb('Error while sending notification');
    }

    cb(null, savedTask);
}

另外async await需要注意以下:

async function x() {
      await y();
}
async function y() {
      await x();
}
x() //Uncaught (in promise) RangeError: Maximum call stack size exceeded
上一篇 下一篇

猜你喜欢

热点阅读