首页 > 其他分享 >js方法保持同步promiseAll

js方法保持同步promiseAll

时间:2023-08-03 18:00:50浏览次数:34  
标签:同步 return res promiseAll js item let message data

单个请求保持同步-方法执行完再执行后面的语句

delItem(item) {
      if (item.row.status == '2'){
        this.$message.warning("需求在开发中,无法删除");
        return;
      }
      if (item.row.status == '3'){
        this.$message.warning("需求已开发完成,无法删除");
        return;
      }
  //  后端请求的数据接口执行完,再执行弹窗this.$confirm
      list({demandUnid: item.row.unid}).then((res)=>{
        let bindTask = []
        bindTask = res.data.data
        if(bindTask.length > 0 && bindTask !== null){
          this.$message.warning("无法删除,请先删除需求关联的开发任务");
          return
        }
        this.$confirm("是否删除此项", "提示", {
          confirmButtonText: "是",
          cancelButtonText: "否",
          type: "warning",
        })
            .then(() => {
              return remove(item.row.unid);
            })
            .then(() => {
              this.$util.showMessage("删除成功", "1");
              this._reset();
            })
            .catch((err) => {
              if (err != "cancel") {
                this.$message.error(err);
              }
            });
      })
    },
  • list({demandUnid: item.row.unid}).then((res)=> 将需要顺序执行的语句放到后面,这样可以保持同步

for循环多个请求保持同步-方法执行完,才执行后面的语句

  • 先执行所有每个后端接口才执行删除操作promise.all方法
delItems() {
      if (this.selectionList.length === 0) {
        this.$message.warning("请选择至少一条数据");
        return;
      }
      let pormiseData = []
      for (let i = 0; i < this.selectionList.length; i++) {
        let item = this.selectionList[i];
        if (item.status == '2'){
          this.$message.warning("需求在开发中,无法删除");
          return;
        }
        if (item.status == '3'){
          this.$message.warning("需求已开发完成,无法删除");
          return;
        }
        let x = list({demandUnid: item.unid}).then((res)=>{
          let bindTask = []
          bindTask = res.data.data
          if(bindTask.length > 0 && bindTask !== null){
            this.$message.warning("无法删除,请先删除需求关联的开发任务");
            return 1
          }
        })
        pormiseData.push(x)
      }
      // 同步执行(重点)
      Promise.all(pormiseData).then((res)=>{
        let delFlag = res.filter((item)=> item == 1)
        if (delFlag.length == 0 || delFlag == null){
          this.$confirm("确定将选择数据删除?", {
            confirmButtonText: "确定",
            cancelButtonText: "取消",
            type: "warning",
          })
              .then(() => {
                return remove(this.unids);
              })
              .then(() => {
                this.$util.showMessage("删除成功", "1");
                this._reset();
              })
              .catch((err) => {
                if (err != "cancel") {
                  this.$message.error(err);
                }
              });
         }
      })
    },
  • 等待查询的后端数据全部返回,方法才返回数据promise.all方法
 handleDataBase(val) {
      if(this.databaseUnid !==""){
        getTables(val).then((res) => {
          let data = res.data.data;
          if (data.length > 0) {
            this.tableList = data;
            this.tableList.forEach((tableItem)=>{
              let tableNameKey = tableItem.name
              let tableComment = tableItem.comment
              this.tableCommentArr.push({tableName: tableNameKey, tableComment: tableComment})
            })
          }
          this.tableList.forEach((item, index) => {
            let primaryData = this.tableList[index].name;
            this.enterField(primaryData, index);
          })
        })
      }
    },
    submitData(){
      this.handleTable()
    },
    enterField(item) {
      // 需要同步的后端接口
      let x = getColumns(this.databaseUnid, item).then((res) => {
        let data = res.data.data;
        if (data.length > 0) {
            this.tableCommentArr.forEach((itemTableCommen)=>{
            if (itemTableCommen.tableName == item){
              let tableField = {tableName: item,tableComment: itemTableCommen.tableComment,tableField: data }
              this.tableFieldArr.push(tableField)
            }
          })
        }
        return 1
      });
      this.pormiseData.push(x)
    },
    handleTable() {
      // 等待需要接收的后端接口的数据全部接收完,才执行后面的语句
      Promise.all(this.pormiseData).then((res)=>{
        let flag = res.filter((item) => item != 1);
        if (flag.length == 0){
          let obj = {fieldsData: this.tableFieldArr,tableNames: this.tableList,databaseUnid: this.databaseUnid}
          this.$emit('customEvent', obj)
          this.closedDrawDBTableSelect()
        }
      })
    },

标签:同步,return,res,promiseAll,js,item,let,message,data
From: https://www.cnblogs.com/ElloeStudy/p/17604062.html

相关文章

  • three.js学习2-性能监测工具stats.js
    1.安装npmistats.js2.组件引入import*asStatsfrom'stats.js'3.使用,requestAnimationFrame循环调用的函数中调用方法update(),来刷新时间//创建性能检测letstats=newStats()stats.showPanel(0)//0:fps,1:ms,2:mb,3+:customdocument.body.appe......
  • js实现输入框防抖功能
    <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metahttp-equiv="X-UA-Compatible"content="IE=edge"><metaname="viewport"content="width=......
  • json文件编辑功能
    1Json格式JSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式。它基于ECMAScript(EuropeanComputerManufacturersAssociation,欧洲计算机协会制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。JSON在2001年由DouglasCrockford提出,......
  • Java后端02(jsp)
    jsp​ servlet是无法将后端获取的数据传递给html页面的,无法再servlet中通过转发或者是重定向的方式,给html页面传递响应的后端数据,servlet中由于拼接过于繁琐,是不适合写html的因此引入了jsp,既可以编写html标签,也可以写Java代码,<dependency><groupId>javax.serv......
  • .eslintrc.js 文件内容配置
    以vue项目为例,主要两个文件,1是.eslintrc.js文件(配置),2是.eslintignore(忽略不需要匹配的文件).eslintrc.js 1//ESlint检查配置2module.exports={3root:true,4parserOptions:{5parser:'babel-eslint',6sourceType:'module'7......
  • 【SpringBoot学习】1、SpringBoot 配置 jsp 模板引擎
    springboot整合jsp页面创建springboot项目就不废话了。在原来的基础上直接加东西就可以了1、添加jsp支持的jar包<!--servlet依赖--><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><scope>provid......
  • RTSP流媒体服务器LntonNVR(源码版)平台前端打包出现“UglifyJsPlugin”报错的问题解决
    LntonNVR既有软件版也有硬件版,平台基于RTSP/Onvif协议将前端设备接入,可实现的视频能力有视频监控直播、录像、视频转码分发、检索与回放、云存储、智能告警、国标级联等。平台可将接入的视频流进行转码分发,对外输出的视频流格式包括RTSP、RTMP、HTTP-FLV、WS-FLV、HLS、WebRTC等。......
  • 全国各乡镇的边界数据,json格式适配echarts;
    湖南省的数据现有,联系我获取(免费、帮我看一下小程序);其他省份可通过联系我用脚本获取(要手动输入验证码),或者网站获取(tips:每个区县需要一个个手动下载,且每个下载需要输入验证码):https://www.poi86.com/ ......
  • js 计算加减乘除导致精度丢失
    (function(){varROOT=this;varDECIMAL_SEPARATOR='.';//DecimalvarDecimal=function(num){if(this.constructor!=Decimal){returnnewDecimal(num);}if(numinstanceofDecimal){......
  • web前端技能方法总结(css、js、jquery、html)(2)
    创建链接块display:block;列表样式在一个无序列表中,列表项的标志(marker)是出现在各列表项旁边的圆点。在有序列表中,标志可能是字母、数字或另外某种计数体系中的一个符号。要修改用于列表项的标志类型,可以使用属性list-style-type:ul{list-style-type:square;}1上面的声明把......