美文网首页
异步和同步

异步和同步

作者: a180754bf396 | 来源:发表于2017-09-20 14:43 被阅读0次

    什么是同步什么是异步

    同步即是后一个任务等待前一个任务结束,然后再执行,程序的执行顺序与任务的排列顺序是一致的、同步的
    异步即是
    每一个任务有一个或多个回调函数(callback),前一个任务结束后,不是执行后一个任务,而是执行回调函数,后一个任务则是不等前一个任务结束就执行,所以程序的执行顺序与任务的排列顺序是不一致的、异步的。

    最基本的异步操作

    先了解 setTimeout 和 setInterval
    console.log( "张一" );
    setTimeout(function() {
    console.log( "王三" )
    }, 500 );
    setTimeout(function() {
    console.log( "李四" )
    }, 500 );
    setTimeout(function() {
    console.log( "刘五" )
    }, 500 );
    console.log( "李二" );
    输出结果为张一李二王二 李四刘五
    意思是setTimeout函数 不会 排队执行 而是 改变执行顺序,
    我们写的回调函数 就是以 setTimeout函数 为基础

    回调函数
    function A(callback) {
    callback();
    console.log('我是主函数');
    }
    function B(){
    setTimeout("console.log('我是回调函数')", 3000);//模仿耗时操作
    }
    A(B);
    我是主函数
    我是回调函数

    上面的代码中,我们先定义了主函数和回调函数,然后再去调用主函数,将回调函数传进去。

    定义主函数的时候,我们让代码先去执行callback()回调函数,但输出结果却是后输出回调函数的内容。这就说明了主函数不用等待回调函数执行完,可以接着执行自己的代码。所以一般回调函数都用在耗时操作上面。比如ajax请求,比如处理文件等。
    XmlHttpRequest对象发起请求,设置回调函数用来处理XHR的readystatechnage事件。然后执行XHR的send方法。在XHR运行中,当其属性readyState改变时readystatechange事件就会被触发,只有在XHR从远端服务器接收响应结束时回调函数才会触发执行。也就是如下:
    xmlhttp.open( "GET", "url", true );
    xmlhttp.onreadystatechange = function( data ) {
    if ( xmlhttp.readyState === 4 ) {
    console.log( data );
    }
    };
    xmlhttp.send( null );

    相关文章

      网友评论

          本文标题:异步和同步

          本文链接:https://www.haomeiwen.com/subject/kzonsxtx.html