其他分享
首页 > 其他分享> > 2021-11-07 js自定义串行请求 vue

2021-11-07 js自定义串行请求 vue

作者:互联网

<template>
  <div>
    <button @click="test">Test()</button>
  </div>
</template>

<script>
export default {
  name: "Test02",
  methods: {
    test() {
      let requestFunctions = [this.packing(this.request01, false, true, '555555'), this.packing(this.request02, ({object:{data:{name}}})=>name, false,'5555'), this.packing(this.request03), this.request04]
      this.requestAll(requestFunctions).execute(8888)
      // this.requestAll(this.request01, this.request02, this.request03, this.request04).execute(66666)
    },
    //包装数据
    packing(requestFun, mapChange, skipError=false, successCode = '000000') {
      if (mapChange === true) mapChange = ({object:{data}}) => data
      return {requestFun, mapChange, skipError, successCode}
    },

    // requestAll(...funcArr) {
    //   // let funcList = funcArr.reduce((item,item2)=>item.concat(item2),[])
    //   funcArr.flat().reverse().forEach(func=>{
    //     let e = this.requestAll.execute
    //     this.requestAll.execute = (data,stop) => func(data, e)
    //   })
    //   return this.requestAll
    // },

    requestAll(...funcArr) {
      // let w= (data)=>this.request01(data, (data)=>this.request02(data,(data)=>this.request03(data,(data)=>this.request04(data))))
      let arr = funcArr.reduce((item, item2) => item.concat(item2), []).reverse()
      this.requestAll.execute =arr.reduce((func1, func2,index) =>
        (data, success = true) => {
          func1.successCode = func2.successCode || '000000'
          if (success || (arr[index+1] && arr[index+1].skipError)) {
            if (typeof func2 === "function") {
              func2(data, func1)
            } else if (func2 instanceof Object) {
              if (typeof func2.mapChange === 'function') {
                func2.requestFun(func2.mapChange(data), func1)
              } else {
                func2.requestFun(data, func1)
              }
            } else {
              throw new Error('类型错误')
            }
          }
        }
      )
      return this.requestAll
    },


    // requestAll(...funcArr) {
    //   this.requestAll.execute = funcArr.reduce((item, item2) => item.concat(item2), []).reverse().reduce((func1, func2) => data => func2(data, func1))
    //   return this.requestAll
    // },


    request01(data, next) {
      alert('request01--->' + JSON.stringify(data))
      let url = 'https://wwww.baidu.com'
      let params = {
        name: 'request01',
        data
      }
      this.requestData(url, params, next)
    },
    request02(data, next) {
      alert('request02--->' + JSON.stringify(data))
      let url = 'https://wwww.yohu.com'
      let params = {
        name: 'request02',
        data
      }
      this.requestData(url, params, next)
    },
    request03(data, next) {
      alert('request03--->' + JSON.stringify(data))
      let url = 'https://wwww.baidu.com'
      let params = {
        name: 'request03',
        data
      }
      this.requestData(url, params, next)
    },
    request04(data, next) {
      alert('request04--->' + JSON.stringify(data))
      let url = 'https://wwww.sougou.com'
      let params = {
        name: 'request04',
        data
      }
      this.requestData(url, params, next)
    },
    requestData(url, data, success, fail) {

      setTimeout(() => {
        try {
          let successData = {
            code: '000000',
            object: {
              data: {
                name: '张三',
                age: '15'
              }
            }
          }
          success && success(successData,successData.code===success.successCode)
        } catch (e) {
          alert('cuowu--' + JSON.stringify(e))
        }
      }, 0)
    }
  }
}
</script>

<style scoped>

</style>

标签:11,func2,requestAll,vue,name,自定义,url,let,data
来源: https://blog.csdn.net/qq_15038747/article/details/121197422