美文网首页
js异步编程

js异步编程

作者: 晴天小猪L | 来源:发表于2017-10-26 14:21 被阅读0次

    之前分析过js的运行机制,这里再介绍一下异步编程。

    天生的异步操作,DOM的点击事件,AJAX获取数据,计时器等。两个函数,fn1,fn2,fn2要依靠fn1的结果运行,但是fn1耗时长,这时就要手动实现异步编程。

    1.回调函数

    使用setTimeout把fn1的执行变成异步操作,等fn1运行完,再执行fn2.

    function fn1(callback){

        //fn1的执行语句

        setTimeout(function(){

            callback()

        },1000)

    }

    fn1(fn2)

    这种方法的优点是易于理解,但是耦合性太高。

    2.es6提供的Promise对象

    每个异步任务返回一个Promise对象。

    function fn1(){

        var def = $.Deferred();

       setTimeout(function(){

           //fn1的执行语句

           ded.resolve();

        },1000)

        return def.promise

    }

    fn1.then(fn2)

    3.订阅-发布模式(观察者模式)

    假设存在一个信息中心,一个任务完成后向信息中心发布一个信号,而其他任务可以从信息中心订阅这个信号,从而知道自己什么时候执行。

    jQuery.subscribe('done', fn2)

    function fn1(){

        setTimeout(function(){

            //fn1的执行代码

            jQuery.publish('done')

        },1000)

    }

    fn1运行结束后,向信息中心发布信号,而fn2由于先前订阅了这个信号,所以此时开始执行。

    4.时间监听

    事件被触发后,任务开始执行。

    fn1.on('done', fn2)

    function fn1(){

        setTimeout(function(){

            //fn1的执行代码

            fn1.trigger('done')

        },1000)

    }

    相关文章

      网友评论

          本文标题:js异步编程

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