promise的缺点

731 阅读1分钟

promise主要用于解决异步回调嵌套问题

  1. promise一旦新建就会立即执行,中途无法取消
  2. 当处于pending状态时,无法得知当前出于那一个状态,是刚开始还是刚结束
  3. 如果不设置回调函数,promise内部的错误就无法反映到外部
  4. promise封装ajax时,由于promise是异步,发送请求的三部会被延后到同步代码执行完毕,并且将相应回调延迟到现有有队列的最后,大量使用会降低请求效率。

如何避免promise中途无法取消的问题

axios可以避免

axios实现原理:Promise XMLHttpRequest.abort

结合Promise和XMLHttpRequest.abort实现,在内部新建一个promise对象,实现cancel方法(如果外部调用,则返回一个resolve),一旦外部触发终止机制就调用XMLHttpRequest.abort中断请求,同时向外部抛出异常。