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,你将根本看不到它们.