一个卡了我两天的问题终于解决了,本文主要是解释promise语法的用法。
如果你也是个javaScript初学者,不妨听我唠叨几句。不想听的话直接去最后一个板块
众所周知,微信小程序的代码默认都是异步执行的(Asynchronous).那么异步执行是什么意思呢?从第一句开始执行,然后执行第二句第三句。那么跟同步执行(synchronous)有什么区别呢?区别就在于有些语句需要调用数据库操作(高耗时操作),异步执行时是不会等高耗时操作执行完就会去执行下一句的。那么带来一个什么问题?我举一个经典场景来说明,也就是这次我碰到的情况:
用户登陆场景:用户数据都在数据库,得先到数据库去取数据然后判断正误。我画个流程图
异步执行:
数据还没取回来,就已经执行到下面的逻辑判断,报错undefined,这种情况显然只能采用同步执行逻辑:
核心区别就在于下面执行逻辑代码等不等数据库查完再来执行,因为计算机执行代码时间都是毫秒甚至纳秒级的。查数据库这类操作可能一次操作的时间可以执行几十句逻辑代码。(查本地数据库可能还好,这里我用的云数据库涉及到网络请求,肯定慢)
我最后解决问题是问了一个同学,这里特别鸣谢一下!他的前端一直可以的,yyds~
他给我找了点样例来:如下
看得懂的话就好啦下面是我自己的样例
核心代码:
这是封装了的函数,因为查表操作很常用,封装起来能避免代码冗长。注:tableName的参数是
wx.cloud.database().collection("某个表")
data的参数是账号,因情况而异。自行取舍。
封装好了之后调用:
(this是因为这是小程序开发)
讲解:
图一的26-34行是同步执行的核心代码,其中resolve函数相当于return,把执行后的参数传递到38行的then里面的ans。then里面那个ans可以自己取名(相当于event之类的名字,可以自己取)
这样过后就可以实现同步执行啦。有问题可以评论区问我,知无不答。