我有一些看起来像这样的代码:
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);
});
};
以上是否可以确保转换结果在承诺链中进一步使用?
如何重构这一点以避免延迟反模式?
答案 0 :(得分:6)
当创建新的冗余延迟对象以从promise链中解析时,会发生延迟反模式。
在你的情况下,你已经有了一个Promise对象,所以你只需要返回doSomethingAsync()
结果:
function foo() {
return doSomethingAsync().then(function (result) {
return doSomethingToTheResult(result);
});
};
以上是否可以确保转换结果在承诺链中进一步使用?
是的,确切地说,这是有关承诺的最酷的事情之一。