20200311

@xiaojingzhao

Plan

  • 你不知道的 js -- promise

Notes

promise 是可信任的嘛?

p1 = new Promise(resolve => resolve(42));
p2 = new Promise(resolve => resolve(p1));

p1 === p2; //  false

p3 = Promise.resolve("42");
p4 = Promise.resolve(p3);

p3 === p4; // true

Promise resolution 会展开非 promise 的 thenable 的值。防止把这个不规范的非 promise 的 thenable 对象当做 promise 来处理,所以需要展开。第二个原因,当我们使用第三方工具的时候,如果不确定返回的是否是 promise,可以使用 promise.resolve 来规范返回结果。

建立信任

  1. promise 通过规范,解决了第三方信任问题 -- 控制反转
  2. promise 解决了人对于执行顺序的理解和代码实际发生顺序的差异的问题
  3. promise 解决了回调地狱的问题
  4. promise 规范了输出,所有输出皆异步,无论 thenable, promise 还是普通的值都会被处理成规范的结果,返回的结果是可以信任的

错误

promise 的最佳实践?在最后加上 catch 可以避免吞掉错误。

  • 如何捕获 catch 中的错误?
  1. 全局处理 promise 的 reject,如果一定时间内没有 error 函数注册,那么就能知道这个错误没有被捕获
  2. 浏览器可以在垃圾回收的时机,知道 promise 是否有未捕获的错误

More