关于 ES6 yield 错误如何处理
发布于 10个月前 作者 lonso 756 次浏览
function findOneFun(id, cb) {
    db.blogs.findOne({_id: id}, function(err, o){
      cb(err, o);
 })
}
var findOne = thunkify(findOneFun);
var blog = yield findOne(new toObjectID(this.params.id)); //这句调用中,findOneFun的cb 出错,如何捕捉。 try catch?

顺便说个小问题,浏览器最小化的时候,文本框长度没变,页面撑坏了。 --chrome

8 回复

try { var blog = yield findOne(new toObjectID(this.params.id)); } catch(err) { // }

对 使用TJ 大神的 co 的错误是可以try catch的, 普通的generator可以yield出来

难道就是变成原来同步那种try,catch了,没有那种比如第一个参数如果存在表示就是错误这种方式了?

yield 出来是错误,然后服务端就500了 能不能有更友好的方式?

@lonso 如果你是用koa的话,可以在应用层统一处理错误。

@coderhaoxin 你说的是 app.on('error’, fn) 这里?

@lonso 你也可以添加个全局的错误捕获

/*
 * global error handle
 */
app.use(function * (next) {
  try {
    yield next;
  } catch (e) {
    if (e.code === 400) {
      this.status = 400;
      this.body = {
        message: e.message
      };
    } else {
      this.status = 500;
      this.body = {
        message: 'server error'
      };
    }
  }
});

让我们一同期待node JS语法实现这样的方式:

var [err,data] = await findOne(new toObjectID(this.params.id));

届时,一切将变得多美好…

回到顶部