首页 > 其他分享 >解决先异步调用一个接口,再根据返回值继续循环异步,然后再同步的场景.then的连续调用

解决先异步调用一个接口,再根据返回值继续循环异步,然后再同步的场景.then的连续调用

时间:2023-12-21 14:46:11浏览次数:888  
标签:异步 调用 userRes any item 返回值 data id

场景描述:人员select下拉框为分页只查20个数据下拉(真实数据可能下拉有大几千),但是编辑页进来的id不在这20个数据下拉之内,所以显示的就是id值数组(因为是多选下拉框)

解决:编辑回显方法内写

getUserSecList(data.collaboratorVoList);

然后先调人员20个下拉,调完后,根据传参的编辑id进行循环遍历,判断是不是在这个20个下拉里面,如果不在则给cyList里面追加

坑点,会存在同步异步的大bug,因为先异步调getUserlistInter,然后在这成功回调里面需要先进行人员遍历,不在的在异步调根据id查人员的接口,然后再进行

postForm.collaboratorList = ownerId?.map((item: any) => item.collaborator);

编辑回显,只能用.then().then()进行

第一个.then里面会全部异步执行完了之后再去执行第二个then里面的

 

const cyList: any = ref([]);
let cyListClone: any = [];
const getUserSecList = async (ownerId: any) => {
    getUserlistInter({
        pageNo: 1,
        pageSize: 20,
        status: 1,
        primaryFlag: 1
    })
        .then((res: any) => {
            if (res.code == 200 || res.code == 0) {
                if (ownerId && ownerId?.length) {
                    ownerId.forEach(async (item: any) => {
                        let ff: any = res.data.userInfoList.find((v: any) => v.id == item.collaborator);
                        cyList.value = [...res.data.userInfoList];
                        if (!ff) {
                            getUserInfoById({ id: item.collaborator }).then((userRes: any) => {
                                if (userRes.code == 0) {
                                    cyList.value.push({
                                        id: userRes.data.id,
                                        nickName: userRes.data.nickName,
                                        userName: userRes.data.userName,
                                        userCode: userRes.data.userCode || ""
                                    });
                                }
                            });
                        }
                    });
                }
            }
        })
        .then(() => {
            postForm.collaboratorList = ownerId?.map((item: any) => item.collaborator);
        })
        .catch((err: any) => {
            console.log("err", err);
        });
};

 

标签:异步,调用,userRes,any,item,返回值,data,id
From: https://www.cnblogs.com/lsc-boke/p/17918996.html

相关文章

  • 调用并调试函数
    debug命令可以调用并调试一个函数在我们想要查找问题并进行详细调试的时候,一个简单的技巧就是先调用一下 debugger 命令。例如,假设我们有以下形式的函数:functionfn(){/*某些代码*/}可以在自己的控制台里这样操作:debugger;fn(1);然后点击 Stepintonextfunc......
  • 远程过程调用:门和Sun RPC
    一、门门提供了调用同一台主机上的另外一个进程中某个过程的能力。门是一种特殊类型的IPC,因为客户端和服务器之间以函数参数和返回值形式交换信息。示意图:本想验证书中源码,发现头文件:#include<door.h>都没有,互联网上查了很久,也没有相关的信息。暂且作罢。。。二、SunRPC......
  • 同事突然问我:异步网络请求编码的方法
    本文分享自华为云社区《异步网络请求编码》,作者:张俭。本文介绍常见的异步网络请求编码手法。尽管像golang这些的语言,支持协程,可以使得Programmer以同步的方式编写代码,大大降低编码者的心智负担。但网络编程中,批量又非常常见,这就导致即使在Golang中,也不得不进行协程的切换来满足......
  • Python异步编程之yield from
    yieldfrom简介yieldfrom是Python3.3后新加的语言结构,可用于简化yield表达式的使用。yieldfrom简单示例:>>>defgen():...yieldfromrange(10)...>>>g=gen()>>>next(g)0>>>next(g)1>>>yieldfrom用于获取生成器中的值,是对yield使用的一种......
  • 微服务调用链的排查,请求日志排查超时时间,锁定超时的原因
    微服务调用链的排查,请求日志排查超时时间,锁定超时的原因A微服务>>B微服务>>C微服务论日志的请求开始时间和结束时间的重要性。完整的日志格式:另外接口的入参,出参也需要加上,日志需要根据参数的关键字来搜索,比如会员号,ID等唯一标识。A服务 logger.info("调用B服务httpParam......
  • python代码实现保存微博文娱榜的数据Ajax异步加载
    最近有小伙伴看完蜜蜂之前分享的爬虫文章之后,使用python代码实现了自动保存网站上面的图片到本地,但是最近又有新的需求。需求描述:爬取微博文娱榜的数据,并保存到csv文件中网址:https://weibo.com/hot/entertainment需要将一下框上的两个字段都爬取下来。对于这样的需求,看过蜜蜂之前......
  • Task基础-创建Task,Task传参,获取Task返回值
    Task基础-创建Task,Task传参,获取Task返回值Task基础介绍Task的创建获取Task的执行结果 补充细节1、Task基础介绍Task类是TaskProgrammingLibrary(TPL)中最核心的一个类,下面我将会像大家展示如何使用一些方法来创建不同类型的Task,取消Task,等待Task执行完成,获取Task执行......
  • Spring Cloud OpenFeign:基于Ribbon和Hystrix的声明式服务调用
    ......
  • Midjourney模拟API生图调用
    目前Midjourney没有对外开放API接口,所以通过MJ自动化生图的主要方式是,集成Discord应用机器人,通过机器人与MJ机器人进行交互,并监听频道内的生图结果,最终拿到图片地址。简单介绍下步骤一、购买MJ账号二、获取账号Authorization在网页中向MidjourneyBot发送/imagine进行生图我......
  • 网页在线编辑Excel表格,调用本机Office,非模拟,插入图片,导出PDF全屏编辑
    Excel作为微软Office的重要组成部分,在各行业中应用非常广泛,随着互联网及云计算的普及,网页在线编辑Excel表格也越来越成文更多人的广泛需求,而在网页中却无法直接在线编辑微软Office,下面介绍一种Web网页在线编辑Excel表格方案,可以调用本机原生Offce软件,直接在网页上编辑Excel表格。......