前端vue项目js中怎么保证链式调用后台接口

在一个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可以保证多次调用同一接口,按链式调用,上一次接口请求数据回包后才进行下次调用

原文地址:https://www.cnblogs.com/ChineseLiao/p/11808891.html

时间: 2024-08-29 17:41:46

前端vue项目js中怎么保证链式调用后台接口的相关文章

js中的作用域链

js中的执行环境: 所谓执行环境(有时也称环境)它是JavaScript中最为重要的一个概念.执行环境定义了变量或函数有权访问的其他数据 ,决定了它们各自的行为.而每个执行环境都有一个与之相关的变量对象,环境中定义的所有变量和函数都保存在这个对象中. js中的作用域链: 每个函数都有自己的执行环境,当代码在执行环境中执行时,就会创建变量对象的作用域链.作用域链保证了对执行环境有权访问所有变量和函数的有序访问.作用域链的前端,始终都是当前执行的代码所在的环境的变量对象,如果环境是一个函数,那么它的

好程序员web前端教程分享js中的模块化一

好程序员web前端教程分享js中的模块化一:我们知道最常见的模块化方案有CommonJS.AMD.CMD.ES6,AMD规范一般用于浏览器,异步的,因为模块加载是异步的,js解释是同步的,所以有时候导致依赖还没加载完毕,同步的代码运行结束:CommonJS规范一般用于服务端,同步的,因为在服务器端所有文件都存储在本地的硬盘上,传输速率快而且稳定. 1.script标签引入 最开始的时候,多个script标签引入js文件.但是,这种弊端也很明显,很多个js文件合并起来,也是相当于一个script,

团队开发前端VUE项目代码规范

团队开发前端VUE项目代码规范 2018年09月22日 20:18:11 我的小英短 阅读数 1658 一.规范目的: 统一编码风格,命名规范,注释要求,在团队协作中输出可读性强,易维护,风格一致的代码 二.开发SRC目录: 1.Vuex目录 (状态树配置) 2.Router目录(路由配置) 3.Pages目录 (放置主路由组件 注意命名规范) 4.Common目录 (放置静态文件) 5.Config目录 (全局配置项,路由拦截,报错信息,等枚举信息) 6.Api目录 ( 相关全局请求调用配置.

项目--js中替换目标字符串指定的所有字符

js提供的字符串替换函数replace可以将字符串中符合条件的字符串替换成目标字符串.但是一般使用字符串进行查找替换只能替换第一个符合条件的结果.如var str = 大家都是男人吗,难道不是吗!;str = str.replace('吗', '嘛');alert(str);var str = 大家都是男人吗,难道不是吗!;str = str.replace('吗', '嘛');alert(str);上述代码中只有第一个吗被替换,输出结果是大家都是男人嘛,难道不是吗! ,嘿嘿如果想全部替换字符串

一段经典的js命名空间创建和链式调用代码

var YourGlobal = { namespace: function(ns) { var parts = ns.split('.'), object = this, i, len; for(i =0, len=parts.length; i<len; i++) { if(!object[parts[i]]) { object[parts[i]] = {}; } object = object[parts[i]]; } return object; } }; YourGlobal.name

前端Vue项目——初始化及导航栏

一.项目初始化 创建webpack模板项目如下所示: MacBook-Pro:PycharmProjects hqs$ vue init webpack luffy_project ? Project name luffy_project ? Project description A Vue.js project ? Author hqs ? Vue build standalone ? Install vue-router? Yes ? Use ESLint to lint your cod

js中的原形链问题

---恢复内容开始--- 一.在js中大家讨论的原形链都是围绕在prototype和__proto__. 1.__proto__是内部原型 2.prototype是构造器原型(构造器就是构造函数) 3.所有的构造器(构造函数)的__proto__都指向Function.prototype 4.所有的构造器(构造函数)都可以被看做是由Function()创建(new ==>  fn = new Function()  ,obj = new Function() ) 5.现在关于Function()

去除vue项目地址栏中的#

在router文件夹下的index.js中的router实例中添加mode属性,值设置为history export default new Router({ mode:"history",//去除哈希值的#号 routes }) 原文地址:https://www.cnblogs.com/wyongz/p/11193056.html

【前端】vue项目 url中传递数组参数

[问题情景] 我在项目中使用了一个iframe,引入另一个项目,想通过动态修改iframe的src使iframe中的页面动态展示,在这个过程中,我碰到了一个问题,就是我往url传递数组参数的时候,接受到的是[object object],这使我读不出我传递的参数.但是我百度谷歌了一把,都没有找到很好的解决方案.下面附上我的解决方案. [解决方案] 传递参数的页面 let testArray = [{a:1},{b:2},{c:3}]; let testStr = encodeURICompone