• 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之类的名字,可以自己取)
    这样过后就可以实现同步执行啦。有问题可以评论区问我,知无不答。

  • 相关阅读:
    OBS Studio 30.0 承诺在 Linux 上支持英特尔 QSV,为 DeckLink 提供 HDR 回放功能
    第四章-串
    springboot实现ACL+RBAC权限体系
    什么是IPQC(制程控制)?
    mongodb 数据分析
    C++中的各种“虚“-- 虚函数、纯虚函数、虚继承、虚基类、虚析构、纯虚析构、抽象类讲解
    c++基础(十四)——继承
    怎么按要求对PDF文件进行拆分?PDF拆分教程来了
    微信小程序快速入门【四】
    如何高效的提升自己的逻辑思维能力?
  • 原文地址:https://blog.csdn.net/weixin_44751167/article/details/125472591