前端面试题之完成Session对象,使其符合要求

题目:完成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);
            }

就是用定时器来实现轮询,隔一会儿问一下是不是两个数据都拿到了,一旦拿到,就返回出去,并清理计时器.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值