Promise结合axios的使用

一、Promise的返回值

Promise有三种状态:pendding fullfilled reject

二、Promise与axios一起使用时的注意事项

1、如果需要axios调用接口后的返回值

这种情况是需要调用接口后的返回值,则需要return 一个axios ,然后在axios中的then函数中return接口返回的值。代码如下:

js 复制代码
async adjBalFn(schemaGuid) {
      let params = {
        agencyCode: this.agencyCode,
        balanceKey: [],
        fisPerd: this.date.includes('0') ? Number(this.date.split('0')[1]) : Number(this.date),
        schemaGuid
      }
      this.$showLoading()

//这里return 一个axios
      return this.$axios
        .post('/XXXX/api', params)
        .then(result => {
          if (result.data.flag == 'success') {
            this.$hideLoading()
            // 这里再把axios接口返回的值再return出去
            return result.data.data
            // return Promise.resolve(111)
          } else {
            this.$hideLoading()
            this.$message.error(result.data.msg)
          }
        })
        .catch(error => {
          this.$message.error(error)
          this.$hideLoading()
        })
    }
    
    

使用时这样使用:

js 复制代码
let res = await this.adjBalFn(adjBalList[i].schemaGuid)
//在这个判断条件上直接使用res,它即为一个对象,这里是判断返回值是否是空对象
if (Object.keys(res).length === 0) {
  this.$message.error('当前期间余额调节表还未生成,请确认生成后进行归档!')
  adjBalFlag = false
  break
}

解释: return this.$axios是返回一个Promise,然后promise的值是result.data.data

2、也可以最外层return new Promise,然后在里面再resolve出去

js 复制代码
async adjBalFn(schemaGuid) {
      let params = {
        agencyCode: this.agencyCode,
        balanceKey: [],
        fisPerd: this.date.includes('0') ? Number(this.date.split('0')[1]) : Number(this.date),
        schemaGuid
      }
      this.$showLoading()
      //在这里return new Promise   ,然后再在里面resolve出去
      return new Promise(resolve => {
        this.$axios
          .post('/gl/bank/getRecon', params)
          .then(result => {
            if (result.data.flag == 'success') {
              this.$hideLoading()

              //在这里再resolve出去
              resolve(result.data.data)
            } else {
              this.$hideLoading()
              this.$message.error(result.data.msg)
            }
          })
          .catch(error => {
            this.$message.error(error)
            this.$hideLoading()
          })
      })

    }

使用时这样使用:

js 复制代码
this.adjBalFn(adjBalList[i].schemaGuid).then(res => {
  console.log('res: ', res)
  if (Object.keys(res).length === 0) {
    this.$message.error('当前期间余额调节表还未生成,请确认生成后进行归档!')
    adjBalFlag = false

    break
  } 
})
需要在then中接收到返回值 ,然后再使用。

解释:这里在最外层包裹一个new Promise 等于是一个大的promise了,直接resolve出去就是这个函数返回的值了。可以直接使用。

相关推荐
Dream-Y.ocean20 分钟前
鸿蒙PC平台宅匠 3D 室内设计适配实战:基于 Electron 壳方案的 Three.js 双渲染引擎与参数化户型编辑器开发
javascript·3d·harmonyos
Csvn1 小时前
性能监控
前端
Highcharts.js1 小时前
Highcharts Gantt使用符号的自定义数据标签开发甘特图示例
javascript·甘特图·highcharts·图表开发·实战代码·响应式图表
Csvn2 小时前
构建工具
前端
FRing032 小时前
vue2干货总结3(computed计算属性、watch监听器)
开发语言·前端·vue.js·vue2
kyriewen4 小时前
Skills 榜前 10 我全装了:只有 3 个能直接用
前端·javascript·程序员
IT_陈寒5 小时前
当Java的hashCode遇上Lombok,我的缓存被全清了
前端·人工智能·后端
工控丫丫5 小时前
帆软看板中经常使用的公式函数及经常搭的组合
前端·javascript·数据库
jerrywus6 小时前
我用 GPT-6.1-sol 做了台会讲解的 3D 售货机:60 罐饮料,一口没喝上
前端·agent·claude
孟陬7 小时前
Foobar 技术周刊#159:当看不懂代码时,如何高效排障调试。脏页陷阱:一条只读查询,写入数 TB 数据。推测解码:大模型加速利器
前端·人工智能·后端