异步数据转化为同步数据处理的两种情况:
第一种:定点定时将异步转化为同步
举例:在A方法中的某处需要调用B方法,并且在拿到B方法的返回值后,才可以继续完成A方法中剩下的功能,但是js的代码是从上至下的运行,会出现B方法还没有走完,A方法的代码已经开始往下走,会拿不到B方法的返回值,这个时候就需要异步获取(A调用B 有一定的位置和时间限制)
代码举例:
A () {
.......
.......
this.B()
....... //需要B方法中返回的结果
.......
}
B () {
返回的结果
}
解决方法:用async和await
async A () {
........
await this.B()
........
}
async B () {
.......
return 返回一个Promise 对象
}
1.好的文章链接:https://www.cnblogs.com/SamWeb/p/8417940.html
第二种:
举例:在A方法中需要B方法中的值才可以进行下去,但是A方法中不需要调用B方法,可以在代码刚开始就拿到B方法中的值,或者在B方法完成时再调用A方法(调用B方法没有特定的时间点限制)
代码举例:
第一种: A不是初始时调用的,就让B在初始时调用
creatd() {
this.B() //在页面刚刷新的时候就获取到了值
}
method () {
A () {
const a = 0
const c = a + this.b //在调用A方法的时候,此时已经拿到this.b
}
B () { this.b = 5 }
}
第二种: A是在初始时调用的,这时就不能让A,B同时在初始时调用,因为js从上到下走,可能都走到A了,
B的返回值还没有拿到,所以最好先调B,拿到B的返回值了,再调A
creatd() {
this.B() //在页面刚刷新的时候就获取到了值
}
method () {
A () {
const a = 0
const c = a + this.b //在调用A方法的时候,此时已经拿到this.b
}
B () {
this.b = 5
this.A() //可以确定绝对拿到了this.b
}
}
失误举例:
creatd() {
this.B()
this.A() //B的方法可能还没有走完,就开始走A的方法,可能拿不到this.b,因为后台数据的反应速
度不同,可能会失误,不建议
}
method () {
A () {
const a = 0
const c = a + this.b
}
B () { this.b = 5 }
}