我认为在使用ES6 Promises时应该可以链接.then()方法。换句话说,我认为当解析promise时,传递给resolve函数的值应该传递给任何链接的然后处理程序。如果是这样, value 在下面的链式然后处理程序中是否未定义?
function createPromise() {
return new Promise((resolve) => {
resolve(true);
});
}
createPromise()
.then((value) => {
console.log(value); // expected: true, actual: true
})
.then((value) => {
console.log(value); // expected: true, actual: undefined
});
答案 0 :(得分:7)
每个then()
都可以返回一个值,该值将用作下一个then()
调用的已解析值。在您的第一个then()
中,您不会返回任何内容,因此value
在下一个回调中未定义。在第一个中返回value
以使其在第二个中可用。
function createPromise() {
return new Promise((resolve) => {
resolve(true);
});
}
createPromise()
.then((value) => {
console.log(value); // expected: true, actual: true
return value;
})
.then((value) => {
console.log(value); // expected: true, actual: true
});

答案 1 :(得分:2)
你必须将它返回到承诺中以传递它。或者创建一个随之解决的新承诺。
createPromise()
.then((value) => {
return value;
})
.then((value) => {
console.log(value);
});
或者
createPromise()
.then((value) => {
return new Promise.resolve(value);
})
.then((value) => {
console.log(value);
});
答案 2 :(得分:1)
.then
总是返回一个Promise,它解析为函数回调中返回的值。由于您在第一次调用.then
时未返回任何内容,undefined
将成为已返回的Promise的已解析值。
换句话说,如果您想在第二次调用true
时解决.then
,则必须在第一次调用中将其返回,如此,
createPromise() // returns a Promise
.then(function (value) {
console.log(value); // => true
return value; // now this will return a Promise that resolves the value `true`
}).then(function (value) {
console.log(value) // => true
});
如果您需要更多信息,可以参考MDN's documentation on method chaining获取ES2015承诺。