题目:完成Session对象,使其符合要求,可适当为Session添加属性
var Session = {
data:{},
init:function(){
// data由两个ajax请求返回的数据组成,必须两个都拿到数据之后才能执行
var _this=this;
$.ajax({
url:'ajax1',
success:function(res){
// res === 'ajax1'
_this.data.ajax1=res
}
});
$.ajax({
url:'ajax2',
success:function(res){
_this.data.ajax2=res
}
})
},
get:function(callback){
}
}
Session.get(function(data){
console.log(data.ajax1+data.ajax2)
})
// 输出ajax1ajax2
我拿到的时候把重点放在了必须两个都拿到数据之后才能执行
, 当时想到了Promsie,他有一个.all
的方法,表示在几个异步操作都拿到结果之后再去操作
但事实上这里不能这样操作,因为.all()
里面需要的是两个异步的操作,也就是init方法中的那两个ajax.
所以咱们这里可以用轮询的思想来解决,代码如下;
get:function(callback){
this.init()
var timeId = setInterval(() => {
if(this.data.ajax1 && this.data.ajax2){
callback(this.data)
clearInterval(timeId)
}
}, 30);
}
就是用定时器来实现轮询,隔一会儿问一下是不是两个数据都拿到了,一旦拿到,就返回出去,并清理计时器.