在一個for循環中對同一接口調用多次,如何保證逐步執行,同步執行。
html部分
<DcFileUpload v-for="(item, index) of fileLengthList" :key="index" ref="fileUploadData"> </DcFileUpload>
DcFileIliad組件部分
//slot 標簽就是為了備用留坑,如果用戶需要在組件中增加節點就可以了,類似於插座功能
<template> <div> <div class="form-unit form-upload" style="display:inline-block"> <Input v-model="fileName" class="tc-15-input-text m" disabled :placeholder="placeholder" /> <a class="tc-upload-btn" title="選擇文件"> <div class="file-input-wrap"> <input ref="input" type="file" name="file" :accept="accept" style="z-index:999" @change="handleFileChange" /> <span>選擇文件</span> </div> </a> <slot></slot>
</div> </div> </template> <script> import { mapActions } from 'vuex'; import DcUploadHelper from '@/common/utils/dcUploadHelper'; export default { props: { directoryId: { type: String, default: '', }, accept: { type: String, default: '', }, placeholder: { type: String, default: '還未選擇文件', }, }, data() { return { fileName: '', // 文件名 files: [], }; }, methods: { ...mapActions('algorithm', [ 'CreateUploadJob' ]), handleFileChange(e) { const { files } = e.target; if (files[0] && files[0].name && files[0].size > 0) { this.fileName = files[0].name; this.files = files; } else { this.fileName = ''; this.files = null; } }, handleFileDelete() { this.fileName = ''; this.files = []; }, upload() { return new Promise(async (resolve, reject) => {
這里一般寫請求方法,向后台發送數據請求 resolve(status)或reject(status); }); }); }, cancelUpload() { this.showUploadModel = false; DcUploadHelper.stopChunkUpload(); }, hasFile() { return this.fileName !== ''; } } }; </script> <style lang="less"> </style>
上面代碼寫了,ref如何在數組中使用,一般都是直接寫一個ref對象就能獲取到整個循環的對象節點數組,就能按下標讀取了
js 部分 async handleSubmitForm() { // 拿到對應的對象數組 const { fileUploadData } = this.$refs; for (let index = 0; index < fileUploadData.length; index++) { const element = fileUploadData[index]; const ret = await element.upload(); cosnole.log(ret); } }
上面代碼的 async 和 await可以保證多次調用同一接口,按鏈式調用,上一次接口請求數據回包后才進行下次調用