需求分析:根据一级标题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

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

  1. python中3个while循环_Python3 里怎么让一个包含 while 循环的异步函数不断运行,而不阻塞正常的代码流程...

    需求是用 tkinter 制作的 gui 工具,点击 [开始] 后在异步函数里 while 循环,点击 [停止] 后让 while 停止 目前的问题是 asyncio.create_task 遇到 a ...

  2. stm32怎么调用for循环内部的变量_循环中的异步amp;amp;循环中的闭包

    在这之前先要了解一下 for循环中let 和var的区别 var 是函数级作用域或者全局作用域,let是块级作用域 看一个例子     function foo() {       for (var  ...

  3. JavaScript 循环中调用异步函数的三种方法,及为什么 forEach 无法工作的分析

    JavaScript 循环中调用异步函数的三种方法,及为什么 forEach 无法工作的分析 业务分析 初版的问题 解决方案 传统的 for 循环 不使用 for 循环的解决方案 分析 forEach ...

  4. QT源码解析(一) QT创建窗口程序、消息循环和WinMain函数

    版权声明 请尊重原创作品.转载请保持文章完整性,并以超链接形式注明原始作者"tingsking18"和主站点地址,方便其他朋友提问和指正. QT源码解析(一) QT创建窗口程序.消 ...

  5. JavaScript 异步函数解析

    前言 在学习 JavaScript 的过程中,理解并灵活运用异步相关知识是一件不容易的事情,这体现在代码可读性.健壮性上,好在 ES6 出现后挽回了这一局面,我们不再需要编写可读性不高的回调嵌套,也不 ...

  6. python等待执行完毕 再继续执行_如何等待一个函数内部异步执行完毕再执行另外一个函数?...

    问题描述 有两个函数f1和f2,其中f1中有异步操作,执行完f1接着执行f2,因为f1内部有异步操作,所以会先执行完f2,再执行f1里的异步,如何等待f1异步执行完再执行f2. 备注:执行方式为f1( ...

  7. V8 中更快的异步函数和 promises

    原文作者:Maya Lekova and Benedikt Meurer 译者:UC 国际研发 Jothy 写在最前:欢迎你来到"UC国际技术"公众号,我们将为大家提供与客户端.服 ...

  8. JavaScript是如何工作的:事件循环和异步编程的崛起+ 5种使用 async/await 更好地编码方式!...

    此篇是 JavaScript是如何工作的第四篇,其它三篇可以看这里: JavaScript是如何工作的:引擎,运行时和调用堆栈的概述! JavaScript是如何工作的:深入V8引擎&编写优化 ...

  9. 【Linux学习笔记④】——Shell程序设计【变量 输入与输出 条件表达式 判断语句 循环语句 Shell函数】

    ⌛️ 文章目录 一.Shell 概述 二.Shell 脚本的定义与执行 2.1 Shell 脚本的定义 2.2 Shell 脚本的执行 三.Shell 变量 3.1 用户自定义变量 3.2 环境变量 ...

最新文章

  1. 可以分屏的软件_分享一款非常好用,且小巧的分屏软件
  2. Jmeter Summariser report及其可视化
  3. python与php8-别再盲目学 Python 了!
  4. 重绘和回流----降低回流减少性能影响
  5. 08-Isolation using virtualization in the Secure World_Whitepaper
  6. MySQL学习笔记03【数据库表的CRUD操作、数据库表中记录的基本操作、客户端图形化界面工具SQLyog】
  7. 解决Firefox已阻止运行早期版本Adobe Flash
  8. 互联网为什么要版权,我支持资源共享。
  9. 三个方法教你做词云图,连文科生都能轻松学会
  10. tensorflow中的py_function与watch
  11. as ssd中文版测试软件,AS SSD Benchmark
  12. python的pyqt5教程_python PyQt5初级教程hello world
  13. Gephi教程【1】安装
  14. 【翻译】torch.device的使用举例
  15. docker学习笔记(二)docker常用命令
  16. c语言程序与化学有关的程序,化工热力学C语言程序.doc
  17. Coco2d-x 3.x : Cocos Studio 制作的UI无法正确显示,出现绿色或白色底
  18. 莫比乌斯反演专题题解
  19. spoolsv.exe占用cpu 100%的解决方法
  20. java —— 后台利用监听器统计在线人数

热门文章

  1. 为什么直接ping知乎的ip不能访问知乎的网站,而百度就可以?
  2. Convolutional neural networks for artistic style transfer
  3. UOJ #150 【NOIP2015】 运输计划
  4. Gigaset ME/pure/pro体验:就是这个德味
  5. vss和vs2008组合搭建源代码管理器
  6. PyCharm调试错误
  7. kvm vnc的使用,鼠标漂移等
  8. H3C交换机 汇聚接口上应用策略路由
  9. 深入理解Java:注解(Annotation)
  10. 基于beego一键创建RESTFul应用