如何从回调函数返回var? OOP属性

时间:2013-11-27 13:22:06

标签: javascript oop callback

var App = function(){
   this.db = [];
}
App.prototype.getJson = function(){
   var slef = this;
   $.getJSON('url', function(data){
       self.db.push(data);
     });
}

$(document).ready(function(){
   var app = new App();
   console.log(app.db); //return []
   setTimeout(function(){
      console.log(app.db); //return data JSON
   }, 5000);
});

为什么会这样?如何在没有setTimeout的情况下获取属性app.db?

AND

我可以在没有收缩的情况下从回调函数返回变量

appAPI.db.async.get(key, function(value) {
        var data = (value === null) ? null : JSON.parse(value);
        // invoke the callback and pass the results to it
        callback(data);
    });

LB.getData('user', function(data) {
    // use the data here
    alert(data.someProperty);
});

1 个答案:

答案 0 :(得分:1)

它导致因为你做了异步请求,请在请求结束后使用promises获取值。 http://api.jquery.com/promise/

setTimeout(function(){
     console.log(app.db); //return data JSON
}, 5000);
如果请求超过5秒

,请不要保存

样品:

var App = function(){
   this.db = [];
}
var dfd = new jQuery.Deferred();
App.prototype.getJson = function(){
   var slef = this;
   $.getJSON('url', function(data){
       self.db.push(data);
       dfd.resolve(data);
     });
}

$(document).ready(function(){
   var app = new App();
   console.log(app.db); //return []
   $.when( dfd.promise()).then(
      function( data) {
        console.log(app.db);
      }
    );
});