静下心来的个人专栏
上一篇

链式Promise——返回值

广告
选中文字可对指定文章内容进行评论啦,→和←可快速切换按钮,绿色背景文字可以点击查看评论额。
大纲

链式Promise返回值

Promise 链的另一个重要方面是能够将数据从一个 Promise 传递到下一个 Promise。您已经看到传递给执行器内部 resolve() 处理程序的值被传递给该 Promise 的fullfilment handler。您可以通过指定fullfilment handler的返回值来继续沿链传递数据。 例如:

const promise = Promise.resolve(42);

promise.then(value => {
  console.log(value); // 42
  return value + 1;
}).then(value => {
  console.log(value); // 43
});

Promise 的fullfilment handler在执行时返回值 + 1。 由于值是 42(来自执行程序),因此fullfilment handler返回 43。然后将该值传递给第二个promise的fullfilment handler,后者将其输出到控制台。

你可以对rejection handler做同样的事情。 当调用rejection handler时,它可能会返回一个值。 如果是这样,该值将用于传递到链中的下一个promise,如下所示:

const promise = Promise.reject(42);

promise.catch(value => {
  // rejection handler
  console.error(value); // 42
  return value + 1;
}).then(value => {
  // fulfillment handler
  console.log(value); // 43
 });

在这里,创建了一个值为 42 的rejection promise。该值被传递到该promise的rejection handler,其中返回值 + 1。即使这个返回值来自一个rejection handler,它仍然用于链中下一个promise的fullfilment handler 。 如果有必要,一个promise的失败可以让整个链恢复。

 

finally返回值(特殊情况)

然而,使用 finally() 会导致不同的行为。 从settlement handler返回的任何值都将被忽略,以便您可以访问原始promise的值。 这是一个例子:

const promise = Promise.resolve(42);

promise.finally(() => {
  // settlement handler
  return 43; // ignored!
}).then(value => {
  // fulfillment handler
  console.log(value); // 42
});

传递给fullfilment handler的值是 42 而不是 43。settlement handler中的 return 语句被忽略,以便可以使用 then() 检索原始值。 finally()的作用之一是返回从原始复制的promise,这个promise保留了原始状态和值。

 

版权声明:著作权归作者所有。

X

欢迎加群学习交流

联系我们