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

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

前言,情况介绍

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

promise样例

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

promise同步解决方案

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

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

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

  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值