1. 异步问题
所谓异步,就是指当我们向数据库请求数据的时候,由于网速等各方面的原因,数据返回的时间是不确定的,我们如果想使用这个数据,必须要等到数据返回成功之后才能使用,否则就会报错。
1-1、问题描述
如下:
很多同学以为代码是从上往下执行的,请求会先执行成功,然后才会执行第11行的代码,商品数量也应该为2个。然而我们的第11行打印出来的却是0,这是为什么呢?
这个错误的原因在于我们没有在请求成功的时候写入数据,正确的数据请求返回是异步的,我们并不知道请求什么时候成功,但是我们的第11行代码不会等我们的数据请求成功后才执行,所以第11行的打印是0而不是2。
1-2,解决方案
为了解决上述问题,将使用数据的地方写入数据请求成功即可。
这样可以解决异步的问题,但是如果我们有很多地方要用到请求成功的数据怎么办呢?我们总不能把所有的代码都写在数据请求成功的地方吧。这时候就需要使用and来解决这个问题。
二、使用并将异步改为同步
所谓同步,就是我们从上到下保持代码正常运行。但是,只要有数据请求,就会有异步的问题。所以这里就得想办法把异步改成同步。这就需要和。
代码如下:
可以看出我们不需要把使用数据的代码写到请求成功里面,这样代码从上到下读起来就跟平常一样了。
翻译过来就是等待的意思。其实这里的意思就是我们等待数据请求完成后,将数据的返回结果赋值给res,然后数据请求成功之后,我们就可以正常使用数据请求返回的结果了。
防范措施
我们在小程序中使用 和 的时候,一定要成对出现。
将其放在函数名称之前和数据请求之前。
并检查:增强编译
现在最新版的小程序开发者工具好像已经支持这个方法了,不勾选增强编译好像也是可以的。不过为了安全起见,还是勾选增强编译比较好。
3. 回调地狱
比如我们有这样的需求:
用户注册时,首先要检查自己是否注册过,若没有注册过,可以重新注册,注册成功后才可以查看商品列表。
3-1、问题描述
我们在这里为您分析需求
如果你只看流程图,你肯定会觉得很简单;但是你必须认识到一个现实,就是这里面的环节。
也就是我们最后如果想把商品展示在页面上,必须靠每次请求成功,现在只有3个请求,但是如果有100个,一层又一层,最后你就手忙脚乱了,这就是回调地狱。
3-2、回调地狱代码
简单说一下,你可能还没有意识到回调地狱的坏处。那我就用代码来实现我们上面的需求吧。
假设我们有
比如我们要注册一个叫“小石头”的用户
步骤 1:检查您是否已注册
可以看出返回的数字为0,也就是说还未注册过。
第 2 步:注册成为用户
可以看到我们已经注册成功了,但是此时代码已经嵌套了。
步骤 3:搜索产品
由于我们在第二步已经成功注册了‘小石头’,因此我们在这一步再注册一个‘大石头’,注册成功后就可以查询产品了。
首先我们看一下代码,此时已经嵌套了三层,代码已经变得有些乱了。
查看结果
可见我们已经能够成功查询到商品数据了。
这里嵌套只有三层,看上去还可以,如果继续一层层嵌套会怎么样?代码会越来越乱。为了避免回调地狱,我们还可以使用 和 来改造代码。
四、结合解决回调地狱
首先看一下修改后的代码
可以看到代码非常简单,逻辑就是从上到下正常执行代码。
为了更加明显的比较。
到这里就结束了,你是不是感觉用了它之后,你的代码变得简洁了很多呢?跟着石头哥的这篇文章来体会一下吧。