避免延迟反模式

时间:2015-02-27 11:34:38

标签: javascript promise

我有一些看起来像这样的代码:

function foo() {

    var deferred;

    deferred = q.defer();

    doSomethingAsync()
        .then(function(result) {
            var resultTransformed = doSomethingSynchronousToTheResult(result);
            deferred.resolve(resultTransformed);
        });

    return deferred.promise;

};

也许:

function foo() {            
    return doSomethingAsync()
        .then(function(result) {
            return doSomethingSynchronousToTheResult(result);
        });       
};

以上是否可以确保转换结果在承诺链中进一步使用?

如何重构这一点以避免延迟反模式?

1 个答案:

答案 0 :(得分:6)

当创建新的冗余延迟对象以从promise链中解析时,会发生延迟反模式。

在你的情况下,你已经有了一个Promise对象,所以你只需要返回doSomethingAsync()结果:

function foo() {
    return doSomethingAsync().then(function (result) {
        return doSomethingToTheResult(result);
    });
};
  

以上是否可以确保转换结果在承诺链中进一步使用?

是的,确切地说,这是有关承诺的最酷的事情之一。