標籤:

js中Async/Await 怎麼做錯誤處理更好?

RT,Async/Await 語法用起來很爽。但是每次都要寫一堆的try catch。所以想看看有什麼比較好的錯誤處理方式。

謝謝啦~


思考一下,真的是 「每次都要寫一堆的try catch」 嗎?還是只需要在需要處理異常的時候 try catch?


只catch你能處理的部分,不能處理的你偷偷catch掉了,程序的錯誤沒有及時發現,數據結構一致性被破壞,然後把垃圾寫盡了文件里,客戶分分鐘損失上億人民幣(逃

什麼,你的甲方沒有上億人民幣可以損失?那你還在這個乙方公司幹什麼,沒有前途!


不用async/await就會少try catch了嗎?

如果try catch用的太多 ,想著重構下代碼吧


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);
}

具體還是參考這位仁兄的文章:How to write async await without try-catch blocks in Javascript


哪位兄弟知道,JavaScript 的 async/await 在微信上使用?微信自帶的瀏覽器不支持promise,導致無法支持async/await,目前小弟有部分Html5需要直接在微信上運行,尋求各位大咖解決方案?跪求結果


一般情況 最外層一個 try catch 就好啦


錯誤處理和你用什麼語法沒關係吧。async/await 真正需要注意的我認為只有下面這種循環引用了:

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


推薦閱讀:

GitHub上有哪些值得關注學習的NodeJS開源項目?
node.js 入門請推薦本好的入門書籍?
為什麼nodejs不需要IO功能?
前端領域流行的js版本控制方法,以及他們之間的區別?
Expressjs 生成的NodeJS網站,用「npm start」可以啟動訪問,forever 或者 pm2 可以啟動,但是無法訪問?

TAG:Nodejs |