如何在使用yield而不是node-style回调时检查错误?

Gee*_*Jan 11 javascript asynchronous generator koa

我正在围绕新的ecma6生成器和javascript中的yield-operator,特别是在koa的环境中.

考虑一个人为的例子:

  newUser.save(function(err, user) {
    if(err){
      //do something with the error
    }
    console.log("user saved!: " user.id);
  }
Run Code Online (Sandbox Code Playgroud)

'Yieldified'这看起来像这样:

  var user = yield newUser.save();
  console.log("user saved!: " user.id);
Run Code Online (Sandbox Code Playgroud)

但是err为了执行目的,我将如何检查存在//do something with the error

Esa*_*ija 10

不幸的是,生成器很难处理错误.我的意思是在每一步手动检查错误并手动传播它们也很糟糕,但不如try-catchJavascript中的语句那么多.

   try {
       var user = yield newUser.save();
       console.log("user saved!: " user.id);
   }
   catch (e) {
       //Abstract code that checks if the error is what you think it is
       if (isFromNewUserSave(e)) {

       }
       else {
           throw e;     
       }
   }
Run Code Online (Sandbox Code Playgroud)

你可以看到try catch语句的问题在于它捕获了一切.还有一个问题是,在运行时Javascript中会抛出其他语言中编译器错误的错误.但是如果你只是在没有检查的情况下使用try catch,你将根本看不到它们.