async-继发和并发的写法

2018-11-06  本文已影响0人  kangaroo_v
async function aaa(){
  let a = await some1()
  let b = await some2()
//这样的写法是继发的 相当于A执行完毕后再执行B
}
async function aaa(){
  let a = some1()
  let b = some2()
  let aDone = await a
  let bDone = await b
//这样的写法是并发的 无先后顺序
}

// 并发的两种写法
// 写法一
let [foo, bar] = await Promise.all([getFoo(), getBar()]);

// 写法二
let fooPromise = getFoo();
let barPromise = getBar();
let foo = await fooPromise;
let bar = await barPromise;

案例

需求是第一个请求是续发,请求成功之后处理两个并发请求,之后在处理相关业务
async reqInOrder() {
  try {
      // 处理并发
      let children = [this.$refs.businessInfo,this.$refs.chainInfo]
      //这里数组遍历执行async ,map返回一个以Promise对象为key的数组
      const dataPromises = children.map( async child => {
          const response = await child.submit()
          return response
      })
      let codeArr = []
      //处理Promise数组得到resolve结果
      for (const dataPromise of dataPromises) {
          codeArr.push(await dataPromise)
      }
      //处理结果 
      //every接受一个函数 是否全部满足条件
      let flag = codeArr.every(item =>{
          return item.code === 1
      })
      //之后处理相关数据 
      if (flag) {
          this.fullscreenLoading = false 
          this.getCount()
      }
  } catch(e) {
      console.log(e)
      this.$message(e)
  }
}

相关文章

终极异步解决方案async,await以及异步并发处理方案

上一篇 下一篇

猜你喜欢

热点阅读