20200328
Plan
- 你不知道的 js - 中卷附录
Notes
asynquence 库 -- 该书的作者自己写的一个异步库
https://github.com/getify/asynquence
promise 的缺点
- 无法取消 -- promise 的设计原则,状态不可逆,不可以从外部被改变
- 无法拿到整个 promise 链 -- 除非一直保留 root promise
- 单值传递,跨 promise 传递值非常不方便
- 整个 promise 链的错误处理易于出错。当前 then 中的 onRejected 是用来处理上一个 promise 的 reject 的情况的。下面这种情况,错误回调不会触发。
p = Promise.resolve(42);
p.then(
msg => console.log(msg.toLowerCase()),
err => {
// never run
}
);
- 如果在任意步骤处理了错误,那么 promise 会当做这个错误已经处理,之后所有的步骤会继续运行。
asynquence 的 motivation
- 对 promise 的一种链式抽象,可取消
- 序列更容易被控制,更方便适应多种场景 -- 基于流,时间,响应等
- 避免了手动重复创建 promise,为创建 promise 链做了抽象
- 封装了一些错误处理,错误重试的机制
- 未处理的 reject, asynquence 会将错误抛出到控制台(chrome 中的 promise 也会,但是 promise 规范并不这样要求),所以不会出现上面的第四点的情况。