理解js回调

121 阅读1分钟

异步协作

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) ;
} );