请教promise的问题,任务A是promise.all,任务C已经依赖任务B,A和B没有依赖,如何让任务B和任务A并发?

主要是两个疑问:

  1. 任务B这样的promise如何加到all里面?
  2. 怎么让另外一个任务依赖all?
    getAll() {
      this.loading = true
      let self = this

      //任务A
      Promise
      .all([apiGetFalvors(), apiGetImages()])
      .then(([flavors, images]) => {
        this.flavorList = flavors.data
        this.imageList = images.data
      })
      .catch((err) => {
        console.log(err)
      })

      //任务B
      var p = new Promise(function(resolve, reject) {
        self.getDesktopList(resolve)
      });

      //任务C
      p.then(function() {
          self.loading = false
          self.refreshStatus()
        })
        .catch(function() {})
    },
阅读 2.2k
1 个回答

Promise的本质是把回调函数用链式写法来表示,因此你的代码里A和B已经是并发的了

Promise.all方法用于将多个 Promise 实例,包装成一个新的 Promise 实例,也就是说Promise.all返回的就是一个Promise,只不过它要在所有子任务都fulfilled后在会变成fulfilled,而只要有一个rejected它就会rejected。如果有任务D依赖它,放在任务A的then里就好了

 getAll() {
      this.loading = true
      let self = this

      //任务A
      Promise
      .all([apiGetFalvors(), apiGetImages()])
      .then(([flavors, images]) => {
        this.flavorList = flavors.data
        this.imageList = images.data
      })
      .then(()=>{
          //任务D,依赖A
          return new Promise((resolve,reject)=>{
              //任务D的逻辑
      })
      .catch((err) => {
        console.log(err)
      })

      //任务B
      var p = new Promise(function(resolve, reject) {
        self.getDesktopList(resolve)
      });

      //任务C
      p.then(function() {
          self.loading = false
          self.refreshStatus()
        })
        .catch(function() {})
    }
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进