从理解Promise到精通最全详解

89 阅读1分钟

Promise api

Promise 的常用 API 如下:

  • Promise.resolve(value)
  • Promise.reject
  • Promise.prototype.then
  • Promise.prototype.catch
  • Promise.race
  • Promise.all

有了all,你就可以并行执行多个异步操作,并且在一个回调中处理所有的返回数据。.all()后面的.then()里的回调函数接收的就是所有异步操作的结果。

有一个场景是很适合用这个的,一些游戏类的素材比较多的应用,打开网页时,预先加载需要用到的各种资源如图片、flash以及各种静态文件。所有的都加载完后,我们再进行页面的初始化。

race

这个race有什么用呢?使用场景还是很多的,比如我们可以用race给某个异步请求设置超时时间,并且在超时后执行相应的操作

  • Promise.all()的作用是接收一组异步任务,然后并行执行异步任务,并且在所有异步操作执行完后才执行回调。
  • .race()的作用也是接收一组异步任务,然后并行执行异步任务,只保留取第一个执行完成的异步操作的结果,其他的方法仍在执行,不过执行结果会被抛弃。
  • Promise.all().then()结果中数组的顺序和Promise.all()接收到的数组顺序一致。
  • all和race传入的数组中如果有会抛出异常的异步任务,那么只有最先抛出的错误会被捕获,并且是被then的第二个参数或者后面的catch捕获;但并不会影响数组中其它的异步任务的执行。