Node.js+Wilddog 中复杂嵌套数据查询的异步处理同步返回数据问题
来源:互联网 发布:android 崩溃数据丢失 编辑:程序博客网 时间:2024/06/03 08:25
环境Node.js + wilddog
这个问题困扰了我好几天
问题:node.js环境,多个节点嵌套查询如何能同步获得数据返回前端?
如下示例因为异步原因,某些数据无法及时获得
例如:存在images(图片信息)、like(图片赞数)、user(用户信息)三个节点:
//查询所有图片信息:ref.child("images").on("value",funciton(snap){ var imgUrl,imgUid,userName,userAvator,numLike=0; var datas = []; if(snap.val()!=null) //循环查询图片详细信息 var i = 0; snap.forEach(function(snapshot){ imgUid = snapshot.val().uid; imgUrl = snapshot.val().imgUrl; imgId = snapshot.key(); //获取图片的用户信息(异步) ref.child("users").child(imgUid).on("value",function(uinfo){ userName = uinfo.val().userName; userAvator = uinfo.val().userAvator; }) //获取图片的赞信息(异步) ref.child("like").child(imgId).on("value",function(likeinfo){ if (likeinfo.val()!=null) numLike = likeinfo.numChildren(); }) datas[i] = { 'imgUid':imgUid, 'imgUrl':imgUrl, 'imgId':imgId, 'userName':userName,<span style="font-family: Arial, Helvetica, sans-serif;">//无法确切获得</span> 'userAvator':userAvator,<span style="font-family: Arial, Helvetica, sans-serif;">//无法确切获得</span> 'numLike':numLike //无法确切获得 } i++; }) //Node.js 返回前端: res.send(datas);})
以上,因为异步处理而且嵌套、循环查询,我们无法确切获得datas数组返回的值,很有可能返回的值是不完整的。
解决办法,使用setInterval,每隔一秒执行一次?貌似可行。
最佳解决办法,重新构造数据结构,做一些必要的数据冗余:把图片的用户基本信息和点赞数写入images节点,那么我们查询的时候只需要一次性查询一个节点即可(配合Promise)。见Wilddog Promise化
0 0
- Node.js+Wilddog 中复杂嵌套数据查询的异步处理同步返回数据问题
- Node.js以数据流的方式处理查询数据
- js中如何处理服务端返回的数据集
- JS中eval()函数处理返回的json数据
- Springmvc中 同步/异步请求参数的传递以及数据的返回
- android中Sqlite查询的数据返回排序问题
- Node.js中同步函数异步编程
- angularJs使用$q服务进行同步请求数据,解决异步获取数据导致return返回为空的问题
- Node.Js 处理post数据
- php json_decode返回数据js的处理
- 用js处理ajax返回的数据
- sql视图处理复杂的数据查询关系
- js异步获取数据的问题
- 解决Postman发送post数据但是Node.js中req.body接收不到数据的问题
- Ajax实现异步查询,返回Json数据
- Oracle复杂数据的处理。
- js中同步与异步处理的方法和区别
- 前端Js中利用Ajax异步调用后台处理数据
- 加密芯片SMEC98SP介绍
- Android 插件化开发(二)
- Set Operations(DS)(15C++)
- 图片按钮+自定义形状
- 《Windows核心编程》之“线程池”
- Node.js+Wilddog 中复杂嵌套数据查询的异步处理同步返回数据问题
- Sqoop使用分析
- (15C++ for homework)Point&Line
- ECS Linux系统初始化后重新挂载数据盘
- mongo aggregate
- 9.9 学习日记
- Bat 自动更新脚本
- 我的爱情视角
- Complex Again