javascript 异步调用

早期的 javascript 的异步调用,都是通过传一个 callback 进去。例如:


function get_content(url, callback) {

  /**
   * callback 参数是一个 function。异步调用结束后就执行 callback()
   * 
   * 例如,先访问网络,访问结束后将结果传给 callback。
   */

    $.get(url, function (content) {

        callback(content); 

    });


}

调用代码:


get_content('http://localhost/someurl.json', function (content) {

   ...

});

可以注意到,jquery.get 也是一个异步调用。jquery 里有很多类似的定义。

回调方法简单、容易理解,但是不够标准化,不同的方法有不同的回调参数。

后来 Promise 标准化了此类实现。原理是一样的,只是写法有标准了。还是前面的 get_content ,用 Promise 可以这样写:


function get_content(url) {

    return new Promise(function (resolve, reject) {

        $.get(url, function (content) {

           // 回调方法。resolve 即成功后的回调。reject 为失败后的回调。
           if ( !content) {
                 reject('no content got'); 
           } //
           else {
                resolve(content); 
           }


        });

    }); 

}

执行代码:


get_content('http://localhost/someurl.json')
    .then(function (content) {
            // 成功时回调
    })
    .catch(function (error) {
            // 失败时回调
    })
    .complete(function () {
           // 无论成功还是失败,最后都会回调
    });


©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容