嵌套的延迟Q Promises可以简化吗?

时间:2016-05-19 14:15:04

标签: javascript promise q

我结合了一些典型的(反)模式,使用Q library查看javascript:

这可以简化多少? (或毫无意义) 特别是:

  • 答:deferred.resolve(...超过返回值并因此立即解决的价值是多少?只有这样一个事实,即进一步代码执行的代码,即。 doSomeMore()
  • 如果是这样,对于A2,这在代码中是没有意义的吗?
  • B: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;
    });
    

    }

2 个答案:

答案 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(); });