【发布时间】:2014-07-12 00:18:13
【问题描述】:
有人可以向我解释为什么在 Promise 回调中返回 Promise 被认为是反模式吗?显然它打破了异常冒泡,但显然我对承诺的理解是缺乏的,因为我无法清楚地想象它是如何工作的。我的反模式代码如下:
var a = new Promise(function (res, rej) {
setTimeout(function () {
res("timeout");
}, 1000);
});
a.then(function (res) {
console.log("a");
console.log(res);
return new Promise(function (res, rej) {
console.log("b");
setTimeout(function () {
res("timeout2");
}, 2000);
}).then(function (res) {
console.log("c");
console.log(res);
}).then(function (res) {
console.log("d");
console.log(res);
}, function (res) {
console.log("e");
console.log(res);
});
}).then(function (res) {
console.log("l");
console.log(res);
});
编辑:
这个问题与我的previous questions 之一有关,我在其中使用承诺做了类似的事情,其中一个答案说:
“您也绝不能将回调与承诺混为一谈,因为这样您就失去了异常冒泡(承诺的意义)并使您的代码超级冗长。”
所以现在我真的很困惑它是否是反模式,如果是,为什么。
【问题讨论】:
-
这不是反模式。
-
你说的是延迟反模式吗? github.com/petkaantonov/bluebird/wiki/…
-
@WillemD'haeseleer 我认为不是......延迟反模式是当你返回承诺或解决它时,即使你不必这样做。再说一次,我的理解可能不正确,如果是这样,请告诉我。
-
从
.then()处理程序返回一个承诺是您如何使用承诺一个接一个地链接多个异步活动。这个概念没有任何反模式。您能否确定您认为您正在使用该反模式的确切位置?看来您误解了这个反模式是什么,因此清除它的唯一方法是更具体地说明您认为反模式实际上是什么。 -
@BenjaminGruenbaum:什么,使用
Promise构造函数?我认为问题是关于从then回调返回一个承诺。
标签: javascript promise