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出去就是这个函数返回的值了。可以直接使用。

相关推荐
青莳吖2 分钟前
使用 SseEmitter 实现 Spring Boot 后端的流式传输和前端的数据接收
前端·spring boot·后端
CodeCraft Studio32 分钟前
PDF处理控件Aspose.PDF教程:在 C# 中更改 PDF 页面大小
前端·pdf·c#
拉不动的猪1 小时前
TS常规面试题1
前端·javascript·面试
再学一点就睡1 小时前
实用为王!前端日常工具清单(调试 / 开发 / 协作工具全梳理)
前端·资讯·如何当个好爸爸
穗余1 小时前
NodeJS全栈开发面试题讲解——P5前端能力(React/Vue + API调用)
javascript·vue.js·react.js
Jadon_z2 小时前
vue2 项目中 npm run dev 运行98% after emitting CopyPlugin 卡死
前端·npm
一心赚狗粮的宇叔2 小时前
web全栈开发学习-01html基础
前端·javascript·学习·html·web
IT瘾君2 小时前
JavaWeb:前端工程化-ElementPlus
前端·elementui·node.js·vue
爱编程的鱼2 小时前
如何在 HTML 中添加按钮
前端·javascript·html
鱼与宇2 小时前
WebSphere(WAS)
前端·chrome