50元奖励,关于多次调用云开发统计API的问题,急急急,谢谢各位
发布于 6 年前 作者 gujun 758 次浏览 来自 问答
  • 当前 Bug 的表现(可附上截图)
  • 预期表现
  • 复现路径
  • 提供一个最简复现 Demo

问题描述:从一个云开发集合中多次调用统计API,因为是异步返回结果,每次返回的都不一样.

需要:因为是分类统计,需要知道返回的结果,是什么条件(由’ID0’+i控制)下产生的结果

4 回复

写成递归函数,在异步回调中循环

//生成查询Promise数组
Promise.all(this.data.courses.map(function(item, i){
  return db.collection("questions").where({
    chapterID: db.RegExp({
      regexp: "ID0" + i
    })
  }).count();
}))
.then(function(resultList){
  console.log(resultList);   //按查询的数组顺序输出
})

这个意思?

你现在是由courses里的结果来查询的,查询时这里面的数据是确定了的。所以问题只是你for循环里的异步回调的接收和整理的问题。

你查询的每次都不一样是因为var声明时把i提升到了外部,而你查询都是异步的,故查询的条件可以执行,但then接收时都是一个值。这里可以用Promise.all()来按照下标来匹配courses读取

两个问题

  1. 既然用正则来匹配, 感觉可以只用查询一次, 然后再来找映射关系

  2. 按现有的多次查询, 你的写法算是个经典的异步问题, 可以试下其他回答的建议, 把 `i` 作为参数传递

兄弟们,急啊,在线等…

回到顶部