繁体   English   中英

链接.then()调用ES6承诺

[英]Chaining .then() calls in ES6 promises

我认为在使用ES6 Promises时应该可以链接.then()方法。 换句话说,我认为当一个承诺解决传递给函数解析值应该传递给任何链接,然后处理程序。 如果是这样的话怎么来的价值在于在后面不确定的链接,然后在下面处理程序?

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
  });

每个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 }); 

你必须将它返回到承诺中传递它。 或者创建一个随之解决的新承诺。

createPromise()
.then((value) => {
    return value;
})
.then((value) => {
    console.log(value);
});

要么

createPromise()
.then((value) => {
    return new Promise.resolve(value);
})
.then((value) => {
    console.log(value);
});

.then总是返回一个Promise,它解析为函数回调中返回的值。 由于在第一次调用.thenundefined返回任何内容,因此undefined将成为返回的Promise的已解析值。

换句话说,如果你想在第二次调用.then解析为true ,你必须在第一次调用中返回true ,就像这样,

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关于ES2015承诺的方法链的文档

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM