20200328

@xiaojingzhao

Plan

  • 你不知道的 js - 中卷附录

Notes

asynquence 库 -- 该书的作者自己写的一个异步库

https://github.com/getify/asynquence

promise 的缺点

  1. 无法取消 -- promise 的设计原则,状态不可逆,不可以从外部被改变
  2. 无法拿到整个 promise 链 -- 除非一直保留 root promise
  3. 单值传递,跨 promise 传递值非常不方便
  4. 整个 promise 链的错误处理易于出错。当前 then 中的 onRejected 是用来处理上一个 promise 的 reject 的情况的。下面这种情况,错误回调不会触发。
p = Promise.resolve(42);
p.then(
  msg => console.log(msg.toLowerCase()),
  err => {
    // never run
  }
);
  1. 如果在任意步骤处理了错误,那么 promise 会当做这个错误已经处理,之后所有的步骤会继续运行。

asynquence 的 motivation

  1. 对 promise 的一种链式抽象,可取消
  2. 序列更容易被控制,更方便适应多种场景 -- 基于流,时间,响应等
  3. 避免了手动重复创建 promise,为创建 promise 链做了抽象
  4. 封装了一些错误处理,错误重试的机制
  5. 未处理的 reject, asynquence 会将错误抛出到控制台(chrome 中的 promise 也会,但是 promise 规范并不这样要求),所以不会出现上面的第四点的情况。

More