javascript-tutorial / javascript-tutorial/ru.javascript.info
Описание Promise расходиться с официальной спецификацией
还没有人认领这个 Issue。
- 主要语言
- HTML
- 星标
- 4.1k
- 派生
- 922
- PR 合并指标
- 30 天内没有已合并 PR
描述
Если для Вас важно соответствовать официальной спецификации,
то на странице https://learn.javascript.ru/promise-api ошибочно заявлено, что
Promise **API**
В **классе** Promise есть 5 статических методов. Давайте познакомимся с ними.
Согласно стандарту ECMAScript - Promise это Standard Object.
То есть утверждение, о том, что Promise это API
а так же, что это класс - не отвечает заявленному в спецификации.
Далее на этой же странице
https://learn.javascript.ru/promise-api#promise-resolve-reject
Для Promise.resolve не описано поведение для случаев, когда в качестве значения
используется обьект содержащий метод then
Так же содержит ошибочное утверждение, что
Методы Promise.resolve и Promise.reject редко используются в современном коде, так как синтаксис async/await (мы рассмотрим его чуть позже) делает их, в общем-то, не нужными.
Методы resolve и reject используется регулярно там, где активно работают с асинхронными задачами, которые должны (или могут) выполняться без сохранения порядка их выполнения. Например с Promise.all
Синтаксис async/awaite не может быть им заменой, в силу того, что представляет из себя последовательное
выполнения задач.
Кроме этого, использование async заставляет функцию работать схожим с генератором образом, где каждый awaite приводит в сохранению всего текущего контекста, с полсдеющим его восстановлением. Что драматически сказывается
на производительности. То есть код, который использует промисы, но не испольузет async/awaite как потрбеляет меньше ресурсов, так и выполняется быстрее.
Страница https://learn.javascript.ru/async-await
Как и promise.then, await позволяет работать с промис–совместимыми объектами. Идея в том, что если у объекта можно вызвать метод then, этого достаточно, чтобы использовать его с await.
Некорректно, все обьекты которые содержат метод then называть промис совместимыми.
Уже хотя бы потому, что если метод не будет обслуживать Resolve или Reject функции, то подобный промис
никогда не будет разрешен.
Строго говоря, then - обьекты, обслуживающие (res) => res( result) это дань реактивному программированию,
и к промисам это имеет отношение косвенное. То есть промисы, реализуют контарт then для того, чтобы их
можно было использовать при реактивном программирование без дополнительных костылей.
贡献指南
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
调研方向
审查 promise-api 和 async-await 中被引用的部分,将其中的术语和陈述与 ECMAScript 规范进行比较。检查对 Promise.resolve 的讨论、thenable 的处理以及与 async/await 的比较。当受影响的说明在技术上准确、与规范一致,并有适当的示例或参考资料支持时,即视为完成。
由索引模型根据 Issue 内容生成。
评估
- 技术栈
- javascript
- 领域
- documentation
- Issue 类型
- 文档
- 难度
- 4/5
- 预计耗时
- 3-5 天
- 活跃度
- 停滞
- 描述清晰度
- 基本清楚
- 新手友好度
- 32/100