异步模式在web编程中变得越来越重要,对于Javscript来说,异步编程要解决的问题有两个:一是必须通过回调函数进行返回值的处理,另一个是复杂情况下会造成嵌套过深。
目前,解决异步流程控制问题的主流方案有以下几种:
##1. 基于回调
适用于流程简单的情况,当出现过多回调的时候实现起来不是很利索,且容易使代码的可读性和可维护性下降。
var done = function(){
console.log("done"); #http cache
在调试问题时经常因为cache而导致一些问题被忽略,所以了解cache还是很有必要的
HTTP 1.0/1.1推出了Expires/Cache-Control两种策略,目前 HTTP1.0 已经很少见了,所有我们重点关注HTTP1.1的Cache-Control。
拿腾讯网为例,在浏览器输入 www.qq.com,用fiddler抓包返回:
Cache-Control: max-age=60
Date: Mon, 20 Jan 2014 13:12:36 GMT
| $.ajax({ | |
| type: 'HEAD', | |
| success: function(data, state, xhr){ | |
| console.log(new Date(xhr.getResponseHeader('Date'))); | |
| } | |
| }); |
| 1:解决中文不同的问题 | |
| function md5(str) { | |
| str = (new Buffer(str)).toString("binary"); | |
| var ret = crypto.createHash("md5").update(str).digest("hex"); | |
| return ret; | |
| } | |
| 2:正常字符串加密 |
| echo "======" && git log --since=2016-01-01 --until=2016-06-30 --pretty=tformat: --numstat | awk '{ add += $1 ; subs += $2 } END { printf "added lines: %s\nremoved lines: %s\n",add,subs }' && git log --since=2016-01-01 --until=2016-06-30 --oneline|wc -l|awk '{print "commit counts: "$1}' && git ls-files | wc -l|awk '{print "file counts: "$1}' && find . -type f | perl -ne 'chomp;print "$_\n" if -T $_'|xargs wc -l 2>&1|tail -n1|awk '{print "line counts: "$1}' && echo "======" |
| function number_cn(num, def) { | |
| def = def || 0; | |
| var output = []; | |
| var UNIT_STR = ['', '十', '百', '千', '万']; | |
| var NUMBER_STR = '零一二三四五六七八九十'; | |
| num = Math.max(parseInt(num, 10) || def, def).toString().split(''); | |
| while (num.length) { | |
| var val = parseInt(num.shift(), 10); |
| const stat = (data) => { | |
| if (!Array.isArray(data) || data.length < 2) return data; | |
| let r = [], max = 0, min = 0, m = {}, vmax = data[0], vmin = data[0]; | |
| data.forEach(v => { | |
| if (m[v]) return; | |
| m[v] = true; | |
| r.push(v); | |
| if (v > vmax) { | |
| vmax = v; | |
| max = r.length - 1; |