避免延迟反模式

Ben*_*Ben 6 javascript promise

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

function foo() {

    var deferred;

    deferred = q.defer();

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

    return deferred.promise;

};
Run Code Online (Sandbox Code Playgroud)

也许:

function foo() {            
    return doSomethingAsync()
        .then(function(result) {
            return doSomethingSynchronousToTheResult(result);
        });       
};
Run Code Online (Sandbox Code Playgroud)

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

我怎样才能重构这个以避免延迟的反模式?

dfs*_*fsq 6

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

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

function foo() {
    return doSomethingAsync().then(function (result) {
        return doSomethingToTheResult(result);
    });
};
Run Code Online (Sandbox Code Playgroud)

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

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