VenusYan 2023-04-19 18:51 采纳率: 100%
浏览 34
已结题

js异步调用promise

这里已经使用了promise,为什么122行会先于117行调用?怎样确保在122行被调用前已经完成整个for循环?

img


另外,为了方便起见,之前在res.data使用的是纯数字作为字段名,但是发现在无法使用纯数字(或外加引号)作为字段名,也无法使用[[ ]]来用变量指代,有什么解决办法吗?

img

for (let i=parseInt(firstD);i<today+firstD;i++){
      zArr[i].cls='circle';
      date=`${y}${m}${d}`+'A';
      date2=`${y}${m}${d}`+'P';
      db.collection("checkin1").where({_id:18257509286}).get().then( res => {
        console.log(res.data[0]._20230418A);
        zArr[i].topColor=res.data[0]._20230418A;
        zArr[i].bottomColor=res.data[0].date2;
      })
    }
    console.log(zArr[18].topColor);

  • 写回答

3条回答 默认 最新

  • CSDN专家-sinJack 2023-04-19 19:39
    关注

    这是因为db.collection("checkin1").where({_id:18257509286}).get()是一个异步操作,它会返回一个Promise对象,而Promise对象是异步执行的。在for循环内部调用db.collection("checkin1").where({_id:18257509286}).get()时,它会返回一个Promise对象,然后立即执行下一次循环。
    当所有循环结束后,Promise对象才会被解析并执行其回调函数,因此第二个console会比for循环内的console先执行。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 4月27日
  • 已采纳回答 4月19日
  • 修改了问题 4月19日
  • 修改了问题 4月19日
  • 展开全部

悬赏问题

  • ¥15 请问一下这个运行结果是怎么来的
  • ¥15 单通道放大电路的工作原理
  • ¥30 YOLO检测微调结果p为1
  • ¥20 求快手直播间榜单匿名采集ID用户名简单能学会的
  • ¥15 DS18B20内部ADC模数转换器
  • ¥15 做个有关计算的小程序
  • ¥15 如何用MATLAB实现以下三个公式(有相互嵌套)
  • ¥30 关于#算法#的问题:运用EViews第九版本进行一系列计量经济学的时间数列数据回归分析预测问题 求各位帮我解答一下
  • ¥15 setInterval 页面闪烁,怎么解决
  • ¥15 如何让企业微信机器人实现消息汇总整合