发表于: 2017-07-15 23:14:53

1 745


今天完成的事情:修改bug3667

明天计划的事情:继续修复bug

遇到的问题:

一、对angular的时间过滤器一直有个疑问:为什么用date过滤器过滤时间戳时,得到的日期是北京时间,而不是世界时。查了一下,发现时间插件会获取用户端的时区。原理怎么研究,但是估计是用dateObject.getTimezoneOffset()这个方法,来获取本机时间与格林威治时间的差。

(getTimezoneOffset() 方法可返回格林威治时间和本地时间之间的时差,以分钟为单位。)


二、昨天改的bug,问题解决了,但是不完美。

浏览器会警告使用了同步的http请求:

原因就是在配置req.open时,第三个个参数设置为fasle,来表示执行同步请求

之前的写法:

//获取服务器时间戳
getServerTime: function() {
   var req = new XMLHttpRequest();
   req.open('GET', document.location,false);
   req.send(null);
   //获取到报文的头
   var headers = req.getAllResponseHeaders().toLowerCase();
   var strs=headers.split("\n");
   var stringTime = strs[0];
   return Date.parse(new Date(stringTime));
}

如果改成true的话,不知道该怎么写req.send的回调函数


解决办法:利用onreadystatechange 事件和promise对象

服务里面:

// 获取服务器时间戳
getServerTime: function() {
   var p = new Promise(function (resolve, reject) {
       var req = new XMLHttpRequest();
       //用异步请求
       req.open('GET', "/" ,true);
       req.send(null);
       //监听XMLHttpRequest 的状态
       req.onreadystatechange = function() {
           //请求已接收
           if (req.readyState === 2) {
               //得到响应头里面的字符串形式的时间
               var time = req.getResponseHeader("Date");
               resolve( {code:0,
                   date: Date.parse(new Date(time))
               });
           }
       };
   });
   return p;
}

//可以直接从响应头里面获得时间,不需要用之前分割字符串的办法:

这样写: var time = req.getResponseHeader("Date");



控制器里面:

// 获取服务器时间
commonUtil.getServerTime().then(function (res) {
   if (res.code === 0) {
       vm.dailyTime = res.date;
       $scope.$apply();
   }
});


用promise封起来,就好多了



三、需求没看懂,需要找测试弄清楚

[期望] 没有领取任务写日报的时候,提醒:请先领取任务。  在那个哪面提示,以什么形式提示?


收获:

回顾了promise对象,以前没怎么看懂,现在再看,就比较好理解了


博客链接:http://www.cnblogs.com/lvdabao/p/es6-promise-1.html





返回列表 返回列表
评论

    分享到