异步协作
function response(data) {
// 一次处理1000个
var chunk = data.splice( 0, 1000 );
// 添加到已有的res组 res = res.concat(
// 创建一个新的数组把chunk中所有值加倍
chunk.map( function(val){
return val * 2; })
);
// 还有剩下的需要处理吗?
if (data.length > 0) {
// 异步调度下一次批处理
setTimeout( function(){
response( data );
}, 0 );
}
}
continuation 回调函数包裹或者说封装了程序的延(continuation)。 为什么精确编写和追踪使用回调的异步 JavaScript 代码如此之难:因为这并不是我 们大脑进行计划的运作方式。
嵌套回调与链式回调 回调地狱代码示例
listen( "click", function handler(evt){
setTimeout( function request(){
ajax( "http://some.url.1", function response(text){
if (text == "hello") {
handler(); }
else if (text == "world") {
request();
}
} );
}, 500) ;
} );