JavaScript 中的 thenables 介绍和使用

发布于 2022-07-07 20:02:10 字数 2341 浏览 1168 评论 0

在 JavaScript 中, thenable 是一个具有 then()功能 。 所有的 Promise 都是 thenable,但并不是所有的 thenable 都是 Promise。许多 Promise 模式,例如 链接 async/await ,都适用于任何 thenable。 例如,您可以在 Promise 链中使用 thenables:

// A thenable is an object with a `then()` function. The
// below thenable behaves like a promise that fulfills with
// the value `42` after 10ms.
const thenable = {
  then: function(onFulfilled) {
    setTimeout(() => onFulfilled(42), 10);
  }
};

Promise.resolve().
  then(() => thenable).
  then(v => {
    v; // 42
  });

你也可以使用 thenables await

// A thenable is an object with a `then()` function. The
// below thenable behaves like a promise that fulfills with
// the value `42` after 10ms.
const thenable = {
  then: function(onFulfilled) {
    setTimeout(() => onFulfilled(42), 10);
  }
};

const v = await thenable;
v; // 42

Thenables in the Wild

许多库实现 thenables 以启用异步/等待支持。

例如, Mongoose 查询 是 thenable,尽管它们也有 exec() 返回一个承诺的函数。 Superagent 是一个流行的 HTTP 客户端,它也使用 thenables。 然而,无论是 Mongoose 查询还是 Superagent 请求实际上都不是 Promise。

其他库直接使用 Promise。 例如, Axios 请求 在某种意义上是 Promise,它们是 instanceof Promise

您可以使用将任意 thenable 转换为 Promise Promise.resolve()

// A thenable is an object with a `then()` function. The
// below thenable behaves like a promise that fulfills with
// the value `42` after 10ms.
const thenable = {
  then: function(onFulfilled) {
    setTimeout(() => onFulfilled(42), 10);
  }
};

const p = Promise.resolve(thenable);
p instanceof Promise; // true

const v = await p;
v; // 42

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

美煞众生

暂无简介

0 文章
0 评论
23 人气
更多

推荐作者

qq_7J1imQ

文章 0 评论 0

《一串符号》

文章 0 评论 0

hls.

文章 0 评论 0

雅心素梦

文章 0 评论 0

塔塔猫

文章 0 评论 0

微信用户

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文