循环中调用异步接口获取数据

2023-11-12

前言

遇到这样一个需求:调用接口,返回一个新闻列表,再循环这个新闻列表,用每个新闻的id异步请求这个新闻的视频地址,这就需要在循环里调用接口。如果用for循环,接口还没请求完成,for循环就已经执行完了。所以改成promise去处理。

开始

整体思路就是:先存数组,然后循环生成每一个promise,然后用promise.all来调用,then的时候返回的是一个结果数组。

1、首先定义循环里的异步请求

getInfo(item ,index){
			return new Promise((resolve,reject) => {
				axios.post('/videoUrl',{id:item.id}).then(res=>{
					let url = res.data;
					resolve({id:item.id,url:url})
				})
			})
		}

2、newsList为开始接口获取的新闻列表,对新闻列表进行循环,得到一个promise数组。

let promiseArr = this.newsList.map((item,index) => {
				    return this.getInfo(item, index)
				 })

3、用promise.all来调。

Promise.all(promiseArr).then(value=>{
						console.log(value);
					 //value:[{id: 1, url: "xxxxx"},
					// 		  {id: 2, url: "xxxxx"},
					// 		  {id: 3, url: "xxxxx"}]
						this.newsList = value;
					})

这样就拿到了包含新闻视频地址的新闻列表。

全部代码

<script>
export default {
	name: 'empty',
	data () {
		return {
			newsList:[]//新闻列表
		}
	},
	methods:{
			getNewsList(){
				axios.get('/newsList').then(res=>{
					this.newsList = res.data;//newsList = [{id:1},{id:2},{id:3}];
					let promiseArr = this.newsList.map((item,index) => {
						return this.getInfo(item, index)
					})
					Promise.all(promiseArr).then(value=>{
						console.log(value);
					 //value:[{id: 1, url: "xxxxx"},
					// 		  {id: 2, url: "xxxxx"},
					// 		  {id: 3, url: "xxxxx"}]
						this.newsList = value;
					})
				})
			},
			// 通过新闻id请求新闻视频地址
			getInfo(item ,index){
				return new Promise((resolve,reject) => {
					axios.post('/videoUrl',{id:item.id}).then(res=>{
						let url = res.data;
						resolve({id:item.id,url:url})
					})
				})
			}
	},
	mounted(){
		this.getNewsList();
	}
}
</script>

后记

1、首先关于后台修改接口,正常返回应该是newsList里就返回了视频地址,协商过就是需要单独去调用。
2、这个问题的解决花费了时间,特此记录。文章参考javascript for循环+异步请求导致请求顺序不一致

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

循环中调用异步接口获取数据 的相关文章

  • OpenCV支持中文字符输出实现

    在 http www opencv org cn forum php mod viewthread tid 2083 extra page 1 中 作者给出了原始的在OpenCV中 支持中文字符的输入 原始的实现使用的是OpenCV的C接口

随机推荐

  • Win32API学习笔记第三章

    这次记录的是鼠标与键盘的消息和部分相应API的使用如与标准 本人学的是Win程序设计第五版 有偏差 或哪里有不妥 欢迎大家给予斧正 一 键盘 初阶 Windows有8种不同的消息来传递不同的键盘事件 但是其中的大部分是我们一般不会去处理的
  • 有哪些好用的App云测试平台?

    一 国内外6种好用app云测平台推荐 章节末附pk图 1 国内云测平台 1 Testin云测 网址 https www testin cn Testin云测平台是一款基于云端的移动应用测试平台 为移动应用开发者和测试人员提供一站式的移动应用
  • 永久关闭!

    永久关闭
  • 操作系统 -- CPU的调度策略 CPU Scheduling

    操作系统 CPU的调度策略 CPU Scheduling 进程状态 preemptive and non preemptive Scheduler解决的三个问题 什么时候切换进程 When 怎么将进程和CPU绑定 How 怎么选择需要执行的
  • 在Web上运行Linux

    原文地址 http coolshell cn articles 4722 html more 4722 一个叫Fabrice Bellard的程序员写了一段Javascript在Web浏览器中启动Linux 原网页 我把这个网页iframe
  • Laya页面嵌套和Scene.destory导致的Bug

    Laya2 1 1 1 参考 预设使用 Laya给出了相同模块 逻辑代码也相同情况下 使用页面嵌 runtime的使用方案 但是该方案和Laya Scene open Laya Scene destroy等有冲突 会导致bug 当参考使用L
  • QT如何获取QListWidget的Scroll值

    你可以使用 QListWidget 的 verticalScrollBar 方法来获取一个指向该 QListWidget 的垂直滚动条的指针 然后 你可以使用这个滚动条的 value 方法来获取滚动条的当前值 例如 QListWidget
  • LeetCode刷题记录

    目录 1 数组中重复的数字 本题考验沟通 1 原地置换法 2 哈希表 Set 2 二维数组中的查找 1 暴力法 双for 2 线性查找 3 替换空格 1 字符数组 2 Java自带方法 4 从尾到头打印链表 1 递归法 附加练习 链表 5
  • cytoscape使用方法_APT干货

    中科新生命 成立于2004年 专注于质谱技术方法在科技服务 生物医药 精准医疗领域的应用开发 12年质谱服务经验 每年处理本数超万例 通过与中科院的技术合作及企业研发团队的自主创新 致力成为您优秀的生物技术合作伙伴 每日关键点 Cytosc
  • .NET Core:搭建私有Nuget服务器以及打包发布Nuget包

    使用docker搭建私有Nuget服务器 docker run d p 8080 80 v PWD nuget db var www db v PWD nuget packages var www packagefiles e NUGET
  • 【转】八大排序算法总结

    插入排序 1 直接插入排序 原理 将数组分为无序区和有序区两个区 然后不断将无序区的第一个元素按大小顺序插入到有序区中去 最终将所有无序区元素都移动到有序区完成排序 要点 设立哨兵 作为临时存储和判断数组边界之用 实现 Void Inser
  • BUAAOS-Lab0实验报告

    LAB0 初始操作系统 一 Note Exercise Thinking Exercise 0 1 echo bash ls Thinking 0 1 Shell简析 Exercise 0 2 gt gt gt Thinking 0 2 文
  • 微信公众平台开放 9 大高级接口,它有什么意义?

    微信的野心大大的 看看它的9大新接口吧 转自 http www ifanr com 366010 微信刚刚更新公众平台 向服务号开放微信认证 开放 9 大高级接口 增加开发者问答系统 并对微信公众平台的后台管理界面进行改版 其中最受关注的是
  • vmware安装redhat 9

    vmware安装redhat 9 1 镜像文件下载 1 1 镜像文件 2 安装系统 2 1 安装时语言 2 2 安装选项设置 2 2 1 手动磁盘分区 2 2 2 设置root密码 允许通过ssh使用密码方式登录root 2 3 开始安装系
  • 最实用的应急响应笔记思路小结

    0x00 事件应急响应的流程分析 事件整个类型大致归类于 事件表现 信息收集 确认攻击类型 事件追查 修复 1 事件的表现 网站类型 被篡改 信息丢失 乱码等 文件类型 被篡改 丢失 泄露等 系统类型 系统卡顿 CPU爆满 服务宕机等 流量
  • 普通大学生如何拿到大厂offer?敖丙教你一招致胜!

    提到敖丙 大家应该并不陌生 三太子敖丙 CSDN博客大V 时年24岁 曾供职于阿里巴巴 蘑菇街等大厂 专注于Java后端研发领域 公众号 三太子敖丙 主理人 敖丙虽然才24岁 但已有五年的职场经验 并且这五年的职场打拼已帮助其实现了财富自由
  • 最新人机对话工具:GPT4介绍(ChatGPT升级版 支持图片且更智能)

    这里写自定义目录标题 显著提升特点 介绍 能力对比 考试能力 知识水平 语言能力 视觉能力 使用方法指南 今天偶然发现期待已久的GPT 4发布了 比上一版的ChatGPT GPT 3 5 性能还好 最主要是支持图片输入 就增加了很多新的场景
  • LeetCode 每日一题 2022_list

    网页链接 LeetCode 坚持住 小镁铝 2022年1月每日一题记录
  • Zabbix--部署--03--proxy安装--6.0

    Zabbix 部署 03 proxy安装 6 0 1 介绍 1 1 官方安装文档 https www zabbix com cn download 1 2 环境介绍 操作系统 centos7 zabbix版本 6 0 LTS 2 准备工作
  • 循环中调用异步接口获取数据

    前言 遇到这样一个需求 调用接口 返回一个新闻列表 再循环这个新闻列表 用每个新闻的id异步请求这个新闻的视频地址 这就需要在循环里调用接口 如果用for循环 接口还没请求完成 for循环就已经执行完了 所以改成promise去处理 开始