循環內部異步函數處理相關問題解析

  需求分析:根據一級標題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.pswp.cn/news/394082.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/394082.shtml
英文地址,請注明出處:http://en.pswp.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.在您的…