【发布时间】:2017-01-22 20:31:51
【问题描述】:
如果我正在链接 Promise 并从解析处理程序返回一个 Promise,那么该 Promise 如何成为对 then 的调用的返回值?幕后发生了什么?
在下面的示例中,在firstMethodHandler 中,对secondMethod 的调用会收到一个新的Promise,然后它会返回该Promise,但该Promise 会从then 方法中返回,并在该方法中将它传递给它的Promise。这是怎么发生的?
function firstMethod(value) {
console.log('1st method:', value)
return new Promise((resolve, reject) => {
resolve(++value);
});
}
function secondMethod(value) {
return new Promise((resolve, reject) => {
console.log('2nd method:', value)
resolve(++value);
});
}
function firstMethodHandler(value) {
console.log("1st method handler:",value);
return secondMethod(value);
}
function secondMethodHandler(value) {
console.log("2nd method handler:", value);
}
firstMethod(1)
.then(firstMethodHandler)
.then(secondMethodHandler)
【问题讨论】:
-
除了“这就是 Promise 规范所说的应该发生的事情”或“它是 Promise 库的实现细节”之外,我不确定您在寻找什么。
-
… 或“与任何其他返回值一样作为参数传递给另一个函数调用”
-
我认为问题在于承诺链如何工作以及
.then()处理程序如何融入承诺链。 -
@jfriend00 从这里的角度来看,OP 似乎是在查询
Promise值如何传递给.then()中的函数,而仅存在对函数的引用?好奇你是否看过这个问题Understanding the execution order of subsequent then() handlers of an resolved promise?
标签: javascript ecmascript-6 es6-promise