我结合了一些典型的(反)模式,使用Q library查看javascript:
这可以简化多少? (或毫无意义) 特别是:
deferred.resolve(...
超过返回值并因此立即解决的价值是多少?只有这样一个事实,即进一步代码执行的代码,即。 doSomeMore()
?deferred.reject
超过throw throw new Error('')
C:try-catch也让我感到烦恼。只是为了确保doSomeMore()
?
function foo(u){
var deferred = Q.defer();
bar(u).then( function (v) {
if (v==42) {
deferred.resolve( Q(null) ); // A
} else {
try {
var controller = new Controller();
deferred.resolve( controller ); // A2
}
catch (error) {
deferred.reject(error); // B,C
}
doSomeMore();
}
return deferred.promise;
});
}
答案 0 :(得分:1)
是的,此代码的目的似乎是确保执行doSomeMore()
,无论构造Controller
时发生了什么。你可以更容易地解决这个问题:
function foo(u) {
return bar(u).then(function (v) {
if (v == 42) {
return null;
} else {
try {
return new Controller();
} finally {
doSomeMore();
}
}
});
}
答案 1 :(得分:0)
这样的事可能吗?
return bar(u).then(function (v) {
if (v==42)
return null;
return new Controller();
}).finally(function() { doSomeMore(); });