如何使函数等待回调的完成?

时间:2013-09-11 14:36:53

标签: javascript jquery design-patterns module synchronous

var results = (function($){
    var objData,
        callback = function (data) {
             objData = data;
        };

    function getData() {
        $.getJSON('/url', function(data){ 
            callback(data) 
        });
    }
    function updateUI(){
        console.log(objData);
    }
    return {
        get   : getData, 
        show  : updateUI,
        //put : putData
    }
})(jQuery);

results.get(); 
results.show()

嗨,我正在尝试缓存一些数据(通过ajax)并根据我获得的数据更新UI,但show()方法在回调返回之前执行,因此objData未定义。想知道如何解决这个问题..

1 个答案:

答案 0 :(得分:1)

使用promises / deferreds。 jQuery的实现不是很好(我上次检查过)但它可用于简单的事情。

var results = (function($){
    var objData,
        callback = function (data) {
             objData = data;
        };

    function getData() {
        return $.getJSON('/url', function(data){    // added return here
            callback(data) 
        });
    }
    function updateUI(){
        console.log(objData);
    }
    return {
        get   : getData, 
        show  : updateUI,
        //put : putData
    }
})(jQuery);

results.get().done(function () { // add `done`
    results.show();
});