vue 如何让多个相同请求状态 只显示一条成功信息

任务需求:

1. 根据选择日期的条数分别向接口发送数据,选择几个日期发送几次请求。

2. 当每条数据都发送成功后,弹出一条操作成功提示。


弹框展示

<el-dialog title="修改价格" :visible.sync="dialogModifyPrice" width="35%" :before-close="handleClose" class="formMain">

         <el-form ref="modifyForm" :model="modifyForm" label-width="90px">

          <el-form-item label="商品名称:">{{modifyForm.roomTypeName}}</el-form-item>

          <el-divider></el-divider>

          <el-form-item label="选择日期:">

            <el-row v-for="(item,index) in dateItems" :key="index">

             <el-col :span="14">

              <el-date-picker v-model="item.date" type="daterange" range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期" format="yyyy-MM-dd" value-format="yyyy-MM-dd" :picker-options="pickerOptions" size="small"></el-date-picker>

              </el-col>

              <el-col :span="3">

                <el-button type="danger" size="mini" class="modifyBtn" v-show="index!=0" @click="deleteInfo(item,index)">删除</el-button>

              </el-col>

              <el-col :span="3">

                <el-button type="primary" size="mini" class="modifyBtn" v-if="dateStatus" @click="addInfo(item,index)">添加</el-button>

              </el-col>

            </el-row>

          </el-form-item>

          <el-form-item label-width="30px">

            <el-row>

              <el-col :span="3">

                <el-checkbox :indeterminate="isIndeterminate" v-model="checkAll"  @change="handleCheckAllChange" class="week" size="mini">全部</el-checkbox>

              </el-col>

              <el-col :span="21">

                <el-checkbox-group v-model="checkedWeeks" @change="handleCheckedCitiesChange">

                  <el-checkbox v-for="week in weekOptions" :label="week" :key="week.id" class="week" size="mini">{{week.name}}</el-checkbox>

                </el-checkbox-group>

              </el-col>

            </el-row>

          </el-form-item>

          <el-divider></el-divider>

          <el-form-item label-width="10px">价格明细</el-form-item>

          <el-form-item label="价 格:" label-width="100px">

            <el-input v-model="modifyForm.price" size="small" class="inputPrice"></el-input>

          </el-form-item>

          <el-form-item label="早 餐:" label-width="100px">

            <el-select v-model="modifyForm.breakfastNum" placeholder="0" size="small" class="inputPrice">

              <el-option label="0" value="0"></el-option>

              <el-option label="1" value="1"></el-option>

              <el-option label="2" value="2"></el-option>

              <el-option label="3" value="3"></el-option>

              <el-option label="4" value="4"></el-option>

            </el-select>

          </el-form-item>

        </el-form>

        <span slot="footer" class="dialog-footer">

          <el-button type="primary" @click="confirmChanges()">确 定</el-button>

        </span>

      </el-dialog>

export default {

  data() {

  pickerOptions: {

        disabledDate(time) {

          return time.getTime() < Date.now() - 8.64e7;

        }

      },

      modifyForm: {

        price: "",

        breakfastNum: "0"

      },

      dateItems:[],

  }

},

    methods: {

      confirmChanges() {

      let arr = [];  //定义个空数组

      for(let i = 0; i<this.dateItems.length; i++){    //循环

        arr.push([i]*0)

        let list = this.dateItems.map(item=>{  //dateItems 是给添加日期

          return item.date

      })

      post("/hotel/dailyPrice/update", {

            id: this.modifyForm.id,

            price: this.modifyForm.price,

            breakfastNum: this.modifyForm.breakfastNum,

            startDate: list[i][0],

            endDate: list[i][1],

            weeks: this.checkedWeeks.join(",")

      }).then(res=>{

              if(res.resultCode === 100){

                arr.splice([i],[i].length,1)

              }

          })

      }

      setTimeout(()=>{

          let arrItem =  arr.every( item=>{

              return item === 1;

          });

          if(arrItem == true){

              this.getDailyPrice();

              this.dialogModifyPrice = false;

              this.$message.success("修改成功!");

              this.dateItems = [];

          } 

      },500)

  }

}


第二种方法:

- 使用promise.all 方法

- 先定义一个数组用来存放参数传给 Promise.all

- 将发送请求方法 包装成Promise 实例。

- 只有发送得请求状态都成功后,才会调用Promise.all方法后面的回调函数。

Promise.all()方法用于将多个 Promise 实例,包装成一个新的 Promise 实例。

例子 :`const p = Promise.all([p1, p2, p3]);`

es6 Promise.all() 具体方法使用

      let arr = [];

      for(let i = 0; i<this.dateItems.length; i++){

        let list = this.dateItems.map(item=>{

          return item.date

      })

        const p = ()=>{

          return new Promise((resolve, reject) => {

              setTimeout(()=>{

                resolve(

                    post("/hotel/dailyPrice/update", {

                      id: this.modifyForm.id,

                      price: this.modifyForm.price,

                      breakfastNum: this.modifyForm.breakfastNum,

                      startDate: list[i][0],

                      endDate: list[i][1],

                      weeks: this.checkedWeeks.join(",")

                    })

                )

              }, 100*i);

              });

          }

          arr.push(p());

      }

      Promise.all(arr).then(()=>{

          this.getDailyPrice();

          this.dialogModifyPrice = false;

          this.$message.success("修改成功!");

          this.dateItems = [];

      })


最后,两种方法都可以实现功能需求,可以根据自身情况选择这两种方法。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,657评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,662评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,143评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,732评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,837评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,036评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,126评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,868评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,315评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,641评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,773评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,470评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,126评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,859评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,095评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,584评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,676评论 2 351

推荐阅读更多精彩内容

  • 以上是英语一的试卷结构,这里还要给大家简单介绍一下英语二,还记不记得刚才老师提到的学术性硕士和专业性硕士这两个概念...
    HW12138阅读 121评论 1 0
  • 在大学,我们将有一群要一起和谐相处的伙伴,同吃同住,或许四年后我们会分开,但是,我们不会忘了对方,因为我们彼此都是...
    Midezirasalvibo阅读 154评论 0 0
  • 题目 请实现一个函数用来匹配包含 . 和 * 的正则表达式。模式中的字符 . 表示任意一个字符,而 * 表示它前面...
    懒人成长阅读 264评论 0 0
  • 听潮加的讲座,让我最大受益的一句话是: 我们无法赚到自己认知以外的钱。 是的,就是这样一句话使我茅塞顿开,醍醐灌顶...
    绿无意阅读 259评论 0 1
  • 前两天在网上看到一个段子: 当学渣给学渣讲题,虽然很尴尬,但那是真友情; 当学霸给学渣讲题,确认过眼神,那应该是爱...
    梵小星阅读 3,258评论 1 9