js异步编程

之前分析过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异步编程)