循环内部异步函数处理相关问题解析

  需求分析:根据一级标题ID筛选出所有对应的二级标题,返回一级标题ID,标题名和二级标题ID,标题名组成的数组

  问题:通过forEach遍历所有一级标题取对应的ID,根据ID条件查找所有的二级标题,遍历符合条件的二级,取出二级标题的ID和标题名,此时,循环内部嵌套条件查找是个异步函数,resolve返回的结果为空。注:此处getSecondTitle为封装的读取数据库的异步函数

const allTitleId =function(firstTitleArray){return new Promise(function(resolve,reject){let secondArr=[],secondObj={},itemObj={},dataArray=[];//console.log(1)firstTitleArray.forEach(function(item){console.log(1)getSecondTitle(item).then(function(ret){// console.log(ret)secondArr=[];ret.forEach((item2)=>{secondObj={};secondObj['_id'] = String(item2._id);secondObj['title'] = item2.title;secondArr.push(secondObj)//console.log(secondArr)
                })console.log(2)itemObj = JSON.parse(JSON.stringify(item));itemObj['secondTitle']= secondArr;dataArray.push(itemObj)}).catch(function(err){reject(err)})})console.log(3)resolve(dataArray)})
}

  解决:javascript代码都是同步执行的,代码都在在一个代码“队列”里面。与此同时javascript还有一个“Event Queue”,事件队列里都是处理一些异步的callback/handler,处理ajax response,点击啊,文件,数据库操作结果。关键是,只有代码队列所有代码都执行完毕了,javascript才会从事件队列里取出一个callback/handler来执行。依赖于事件循环处理异步函数获取数据,会导致脚本事件执行顺序不正确,无法按需求获取数据。应采用递归方法处理异步函数获取数据。

const allTitleId =function(firstTitleArray){return new Promise(function(resolve,reject){let secondArr=[],secondObj={},itemObj={},dataArray=[];(function secondTitleloop(index){getSecondTitle(firstTitleArray[index]).then(function(ret){secondArr=[];ret.forEach((item2)=>{secondObj={};secondObj['_id'] = String(item2._id);secondObj['title'] = item2.title;secondArr.push(secondObj)})itemObj = JSON.parse(JSON.stringify(firstTitleArray[index]));itemObj['secondTitle']= secondArr;dataArray.push(itemObj)if (++index<firstTitleArray.length) {secondTitleloop(index);} else {resolve(dataArray)}}).catch(function(err){reject(err)})})(0)})
}

 

转载于:https://www.cnblogs.com/xuxiaoqiangAndHM/p/10766029.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/394082.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

nacos怎么修改服务分组_Nacos(六):多环境下如何“管理”及“隔离”配置和服务...

前言前景回顾&#xff1a;现如今&#xff0c;在微服务体系中&#xff0c;一个系统往往被拆分为多个服务&#xff0c;每个服务都有自己的配置文件&#xff0c;然后每个系统往往还会准备开发环境、测试环境、正式环境我们来说算一算&#xff0c;假设某系统有10个微服务&#xff0…

Hive_Hive的数据模型_内部表

Hive的数据模型_内部表 - 与数据库中的Table在概念上是类似。- 每一个Table在Hive中都有一个相应的目录存储数据。- 所有的Table数据(不包括External Table)都保存在这个目录中。 create table t1 (tid int, tname string, age int);create table t2 (tid int, tname string, a…

为啥JAVA虚拟机不开发系统_理解Java虚拟机体系结构

1 概述众所周知&#xff0c;Java支持平台无关性、安全性和网络移动性。而Java平台由Java虚拟机和Java核心类所构成&#xff0c;它为纯Java程序提供了统一的编程接口&#xff0c;而不管下层操作系统是什么。正是得益于Java虚拟机&#xff0c;它号称的“一次编译&#xff0c;到处…

Android WindowManager和WindowManager.LayoutParams的使用以及实现悬浮窗口的方法

1.理清概念 我们使用过Dialog和PopupWindow,还有Toast,它们都显示在Activity之上。那么我们首先需要理解的是android中是如何去绘制这些UI的呢&#xff1f;这里我只讲我所理解的&#xff0c;首先看一层次图&#xff08;盗用网络&#xff09;首先我们看到左边的Activity层&#…

leetcode面试题 04.03. 特定深度节点链表(bfs)

给定一棵二叉树&#xff0c;设计一个算法&#xff0c;创建含有某一深度上所有节点的链表&#xff08;比如&#xff0c;若一棵树的深度为 D&#xff0c;则会创建出 D 个链表&#xff09;。返回一个包含所有深度的链表的数组。示例&#xff1a;输入&#xff1a;[1,2,3,4,5,null,7…

Java集合中的细节

integer数据对比 对于Integer var ? 在-128至127范围内的赋值&#xff0c;Integer对象是在IntegerCache.cache产生&#xff0c;会复用已有对象&#xff0c;这个区间内的Integer值可以直接使用进行判断&#xff0c;但是这个区间之外的所有数据&#xff0c;都会在堆上产生&…

css扩展语言_如何决定是否应该链接或扩展CSS类

css扩展语言by Sarah Dayan通过莎拉达扬 如何决定是否应该链接或扩展CSS类 (How to decide whether you should chain or extend CSS classes) If you’re building an app or a website that changes often, modular CSS methods solve many issues. Instead of copying your…

vue 是否有word编辑控件_GitHub - C84882428/editor-ui: vue集成 tinymce 富文本编辑器,增加导入 word 模板...

editor-uivue 集成 tinymce 富文本编辑器自定义 tinymce 富文本编辑器,在原来的编辑器中增加上传 word 模板最终展示效果:主要代码:整体思路:1,在编辑器原来的基础上增加上传模板按钮2, 前端上传 word 模板3, 服务端接收将 word 转换为html 返回前端4, 前端拿到服务端返回的值,…

Android开发系列之屏幕密度和单位转换

由于Android的开源性&#xff0c;所以目前市面上面Android手机的分辨率特别多&#xff0c;这样的话就给我适配带来了一定的难度。要想做好适配&#xff0c;我们首先应该明白什么是分辨率、PPI、屏幕大小等概念&#xff0c;还有在不同的屏幕密度下&#xff0c;各个单位之间的转换…

java集合AbstractMap_Java 集合中的 AbstractMap 抽象类

Java 集合中的 AbstractMap 抽象类jdk1.8.0_144AbstractMap 抽象类实现了一些简单且通用的方法, 本身并不难但在这个抽象类中有两个方法非常值得关注, keySet 和 values 方法源码的实现可以说是教科书式的典范抽象类通常作为一种骨架实现, 为各自子类实现公共的方法上一篇我们讲…

leetcode392. 判断子序列(动态规划)

给定字符串 s 和 t &#xff0c;判断 s 是否为 t 的子序列。 你可以认为 s 和 t 中仅包含英文小写字母。字符串 t 可能会很长&#xff08;长度 ~ 500,000&#xff09;&#xff0c;而 s 是个短字符串&#xff08;长度 <100&#xff09;。 字符串的一个子序列是原始字符串删…

让机器读懂用户——大数据中的用户画像

让机器读懂用户——大数据中的用户画像 摘要&#xff1a; 用户画像(persona)的概念最早由交互设计之父Alan Cooper提出:“Personas are a concrete representation of target users.” 是指真实用户的虚拟代表&#xff0c;是建立在一系列属性数据之上的目标用户模型。随着互联…

asp.net应用程序_如何在ASP.NET中为聊天应用程序构建键入指示器

asp.net应用程序by Neo Ighodaro由新Ighodaro 如何在ASP.NET中为聊天应用程序构建键入指示器 (How to build a typing indicator for your chat app in ASP.NET) A basic understanding of ASP.NET and jQuery is needed to follow this tutorial.要学习本教程&#xff0c;需要…

activeMQ在文件上传的应用

本次试验主要用到了activeMq和上传插件uploadify的知识&#xff0c;感谢以下两篇文章的作者。 1.http://itindex.net/detail/47160-java-jquery-%E4%B8%8A%E4%BC%A0 2.http://blog.csdn.net/jiuqiyuliang/article/details/47160259 本文中不再提供activeMq和uploadify的介绍。 …

java nginx 例子_Java及nginx实现文件权限控制代码实例

我们知道&#xff0c;使用nginx作为文件下载服务器&#xff0c;可以极大地降低对后端Java服务器的负载冲击&#xff0c;但是nginx本身并不提供授权控制&#xff0c;因此好的方案是由后端服务器实现权限控制&#xff0c;最好的方式是直接复用应用的认证体系&#xff0c;最大化的…

leetcode934. 最短的桥(dfs+bfs)

在给定的二维二进制数组 A 中&#xff0c;存在两座岛。&#xff08;岛是由四面相连的 1 形成的一个最大组。&#xff09; 现在&#xff0c;我们可以将 0 变为 1&#xff0c;以使两座岛连接起来&#xff0c;变成一座岛。 返回必须翻转的 0 的最小数目。&#xff08;可以保证答…

谢烟客---------Linux之DNS服务系统的基础知识

DNS Domain Name Server1)C/S架构&#xff1a;SOCKET通信IP PORT2&#xff09;应用层协议&#xff1a;资源子网BIND Berkerley Information Name DomainDNS由来1&#xff09;统一名字&#xff0c;自己维护 <自己查询>解析: 基于key查找value: 查询数据库(二维关系的表: …

Java实现点击导出excel页面遮罩屏蔽,下载完成后解除遮罩

一、问题场景 最近在做数据统计功能&#xff0c;需求是导出大数据量的excel&#xff0c;时间间隔较长&#xff0c;大概需要十秒左右&#xff0c;点击导出后&#xff0c;页面没有做任何处理&#xff0c;用户也不知道是否正在导出&#xff1b;如果没有做交互上的限制&#xff0c;…

pbs 支持 java_Linux下Java安装与配置

安装以JDK1.6.0_43为例下载jdk-6u43-linux-x64.bin&#xff0c;http://www.oracle.com/technetwork/java/javase/downloads/index.html增加可执行权限 chmod x jdk-6u43-linux-x64.bin&#xff0c;执行 ./jdk-6u43-linux-x64.bin 生成目录jdk1.6.0_43拷贝到/usr/share下&#x…

使用Chatkit构建Node.js命令行聊天应用程序

by Hugo雨果 使用Chatkit构建Node.js命令行聊天应用程序 (Build a Node.js command-line chat application with Chatkit) Building chat in your app can be pretty complex. Yet, with Chatkit, implementing fully-featured chat is nothing but a few lines of code.在您的…