node async await 怎么捕获错误呢
发布于 8 年前 作者 gwyy 8182 次预览 最后一次回复是 8 年前 来自 问答
我知道是用 reject来抛出错误,但是 如果 在一个大大的try catch里面 有很多普通函数 怎么抛出异常呢
比如说
async function insert(id) { if(id == 6) { return new Promise((resolve,reject) => {reject(“aaa”)}); } await db.insert(); //something… } (async () =>{ try { await insert(6); } catch(e) { res.end({error:true,msg:e}); } })();
上面就是一个简单的 判断id的函数 没有复杂的 异步 但是如果这个函数出问题了 要new一个promise来返回错误吗 还是像这样
async function insert(id) { return new Promise( (resolve,reject) => { if(id == 6) { return reject(“aaa”); } await db.insert(); //something… } ); }
把函数所有的代码都 包到一个大大的 primise里面 ?
14 回复
哥哥 既然try catch了 出错就throw new Error();既可以了
@burning0xb 大哥 不能 throw new Error啊 如果抛出error代码直接就崩溃了
@h87kg 原来Promise有静态方法的啊
@burning0xb 测试回复 不好意思
在最外层 try catch,里面 throw 的错误会冒泡被捕获到,再做处理就好了
@gwyy catch住怎么会崩溃
@burning0xb 真的 catch住 throw new Error 也会崩溃
@gwyy
不是很明白你说的,不过我这样是没问题的
zan
https://github.com/dayuoba/allco
参考lodash的 attempt exports.attempt = function (promiseFn, …args) { return promiseFn.apply(null, args).then( function (result) { return result; }, function (e) { return _.isError(e) ? e : new Error(e); } ).catch(function (e) { return e; }); };
使用 let result = await attempt(promisefn, arguments); 判断 result 是不是error _.isError(result); 我是这样处理的