async promise在获取数据上的应用以及与.then的使用

一 async介绍以及在程序中使用

1.1async

async的作用是使函数异步,不阻碍后续代码的运行;

1.2await作用

await会阻碍后续代码的运行,遇到await时需要等到promise reslove后才可继续运行,同步运行外部函数,替代了.then;

1.3代码

    async getData(page, params) {
      this.tableLoading = true
      if (!this.wsSelect) {
        await this.getWS()      //先拿车间
      }
      await this.getRegion(this.wsSelect)  //拿区域和顶点
      await this.getDevs()//拿未布局的设备和已布局的设备
      this.$nextTick(() => { this.tableLoading = false })
    },

在上面这个代码中实现的是拿取车间设备的信息,每个拿取中都在调用着外部函数代码,若是有console.log将会同时显示出各自的信息;与.then的链式反应类似

二 promise作用

2.1 promise介绍

Promise是一个容器,Promise本身不是异步的,但是容器内部往往存放一个异步操作。

2.2 then 在promise作用

两个参数resolve, reject即是改变promise的状态,resolve 方法把 Promise 的状态置为完成态(Resolved),这时 then 方法就能捕捉到变化;then可接受两个参数,第一个处理Resolved状态的函数,第二个处理Rejected函数

2.3 程序中

    getDevs() {
      this.clearLayoutTree()
      return new Promise(async (res, rej) => {
        let promises = []
        promises.push(listNoLayoutProDev({    //未布局生产设备
          wsId: this.wsSelect,
          eqName: ""
        }).then(({ data }) => {
          data.forEach(item => {
            this.layoutDevTreeData[0].children.push(Object.assign({ label: item.eqName }, item))
          })
        }))
        promises.push(     //已布局生产设备
          listLayoutedProDev({    //已布局生产设备
            params: {
              wsId: this.wsSelect,
              eqName: ""
            }
          }).then(({ data }) => {
            this.layoutedProDv = data.data.data
          })
        )
        promises.push(      //已布局工控机
          listLayoutedCtrlDev({    //已布局工控机
            params: {
              wsId: this.wsSelect,
              eqName: ""
            }
          }).then(({ data }) => {
            this.layoutedCtrlDv = data.data.data
            this.layoutedCtrlDv.forEach(item => {
              item.eqCode = item.equipCode
              item.eqName = item.equipName
            })
          })
        )
        promises.push(listNoLayoutCtrlDev(this.wsSelect,).then(({ data }) => {    //未布局工控机
          data.forEach(item => {
            this.layoutDevTreeData[2].children.push(Object.assign({ label: item.equipName }, item))
          })
        }))
        promises.push(     //已布局物流设备
          listLayoutedTransDev({    //已布局物流设备
            params: {
              wsId: this.wsSelect,
              eqName: ""
            }
          }).then(({ data }) => {
            this.layoutedTransDv = data.data.data
            this.layoutedTransDv.forEach(item => {
              item.eqCode = item.equipCode
              item.eqName = item.equipName
            })
          })
        )
        promises.push(listNoLayoutTransDev(this.wsSelect,).then(({ data }) => {    //未布局物流设备
          data.data.data.forEach(item => {
            this.layoutDevTreeData[1].children.push(Object.assign({ label: item.equipName }, item))
          })
        }))
        promises.push(     //已布局缓冲设备
          listLayoutedBufferDev({    //已布局缓冲设备
            params: {
              wsId: this.wsSelect,
              eqName: ""
            }
          }).then(({ data }) => {
            this.layoutedBufferDv = data.data.data
            this.layoutedBufferDv.forEach(item => {
              item.eqCode = item.hsCode
              item.eqName = item.hsName
            })
          })
        )
        promises.push(listNoLayoutBufferDev(this.wsSelect,).then(({ data }) => {    //未布局缓冲设备
          console.log(data);
          data.data.forEach(item => {
            this.layoutDevTreeData[3].children.push(Object.assign({ label: item.hsName }, item))
          })
        }))

        Promise.all(promises).then(() => { res() })
      })
    },

在上面的代码中,promise扮演者异步的角色,拿取各设备数据并用push存储起来

总结 async  promise都是为了异步操作,结合图一的代码,await等待图二promise执行完毕返回的结果,一步步执行,await在忙时会阻碍后面的内部代码,但不影响外部代码的运行

  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值