• JS的Promise语法使微信小程序异步操作同步化(让云数据库先查完再执行下面逻辑代码)


    一个卡了我两天的问题终于解决了,本文主要是解释promise语法的用法。
    如果你也是个javaScript初学者,不妨听我唠叨几句。不想听的话直接去最后一个板块

    前言,情况介绍

    众所周知,微信小程序的代码默认都是异步执行的(Asynchronous).那么异步执行是什么意思呢?从第一句开始执行,然后执行第二句第三句。那么跟同步执行(synchronous)有什么区别呢?区别就在于有些语句需要调用数据库操作(高耗时操作),异步执行时是不会等高耗时操作执行完就会去执行下一句的。那么带来一个什么问题?我举一个经典场景来说明,也就是这次我碰到的情况:
    用户登陆场景:用户数据都在数据库,得先到数据库去取数据然后判断正误。我画个流程图
    异步执行:
    在这里插入图片描述
    数据还没取回来,就已经执行到下面的逻辑判断,报错undefined,这种情况显然只能采用同步执行逻辑:
    在这里插入图片描述
    核心区别就在于下面执行逻辑代码等不等数据库查完再来执行,因为计算机执行代码时间都是毫秒甚至纳秒级的。查数据库这类操作可能一次操作的时间可以执行几十句逻辑代码。(查本地数据库可能还好,这里我用的云数据库涉及到网络请求,肯定慢)

    promise样例

    我最后解决问题是问了一个同学,这里特别鸣谢一下!他的前端一直可以的,yyds~
    他给我找了点样例来:如下
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    看得懂的话就好啦下面是我自己的样例

    promise同步解决方案

    核心代码:在这里插入图片描述
    这是封装了的函数,因为查表操作很常用,封装起来能避免代码冗长。注:tableName的参数是

    wx.cloud.database().collection("某个表")
    
    • 1

    data的参数是账号,因情况而异。自行取舍。
    封装好了之后调用:
    在这里插入图片描述
    (this是因为这是小程序开发)
    讲解:
    图一的26-34行是同步执行的核心代码,其中resolve函数相当于return,把执行后的参数传递到38行的then里面的ans。then里面那个ans可以自己取名(相当于event之类的名字,可以自己取)
    这样过后就可以实现同步执行啦。有问题可以评论区问我,知无不答。

  • 相关阅读:
    国内首发可视化智能调优平台,小龙带你玩转KeenTune UI
    万物皆可集成系列:低代码释放用友深度价值(1)—系统对接集成
    政策加码聚焦工业现代化发展,团队聚能驱动AI机器视觉高质量发展
    物联网中对视频远程传输解决方案
    【三维目标检测】CenterPoint(一)
    【问题思考总结】什么是安全分配方式?
    RabbitMQ linux 安装
    Python单例模式详解与实际应用
    BlockCanary原理解析
    ElasticSearch安装(Windows环境)及基本命令操作
  • 原文地址:https://blog.csdn.net/weixin_44751167/article/details/125472591