实际项目开发中Promise的用法

Promise的api很多,规则也有很多,许多人知道八股题中的打印顺序等等,实际开发中的用法却很少有人提及。

本文刚入职学习公司代码后,学习了一些Promise在项目中的实际用法。由于实际项目较复杂,这里简化了一下,写了一个demo记录一下方便理解。

假设有这么一个情况:
1.有一个表单,表单中有多个附件,提交表单前需要将所有的附件上传,并将所有附件上传返回的id随表单一块提交。
2.附件上传到服务器只能一次上传一个。
这就需要保证所有的附件上传完,并将所有的结果返回后,再提交表单。
那么可以这样:
可以为每一个附件上传构建成一个Promise,并使用promise.all()来执行这N个Promise,这样就保证了所有的附件上传都返回了结果。

  1. 如果所有附件上传成功了,下一步可以提交表单。
  2. 如果promise.all()返回的结果有上传附件失败的情况,可以提示用户有某个附件未上传成功,是否继续提交表单。

第一步,先拿到所有的promise并放到promises数组中

let promises = [] //存放所有附件上传的promise
//fileList为保存附件的数组,根据附件文件数,创建多个promise
this.fileList.forEach(item => {
  let p = new Promise(resolve => {
    this.$http({ //这里是发请求就行,这里举个例子,不写其他参数了
      url: '你的url',
      method: 'post',
      data: '你的data',
    }).then(res => {
      resolve(res) //将结果传递,不调用,后面执行Promise.all拿不到结果
    })
  })
  promises.push(p) //将所有的promise存在数组中
})

第二步,Promise.all来判断

Promise.all(promises).then(results => {
  results.forEach(res => {
    if (res.code === '200') {
      //处理多个promise执行后返回的结果
      //记录上传附件返回的,需要表单提交的信息
    }
  })
  if (所有附件上传成功) {
    //提交表单
  } else {
    //提示用户有附件上传失败,是否继承提交表单
  }
})
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值