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

Javascript 如何从回调函数返回var?OOP属性,javascript,oop,callback,Javascript,Oop,Callback,为什么会这样?如何在没有设置超时的情况下获取property app.db 及 我可以不收缩地从回调函数返回变量吗 var App = function(){ this.db = []; } App.prototype.getJson = function(){ var slef = this; $.getJSON('url', function(data){ self.db.push(data); }); } $(document).ready(fu

为什么会这样?如何在没有设置超时的情况下获取property app.db

我可以不收缩地从回调函数返回变量吗

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);
});


这是因为您执行了关联请求,所以在请求结束后使用promices获取值

如果请求时间超过5秒,请不要保存

样本:

setTimeout(function(){
     console.log(app.db); //return data JSON
}, 5000);

因为
$.getJSON
不是一个即时的过程。请不要在问题结束时扔下一堆
s。你为什么要这么做?你把
slef
打成
self
一件事……不要用你自己的承诺。只需返回jQuery已经提供给您的一个。您完全错误地使用了它们。你只是在向他展示如何做错事。A) 您声明了一个全局
dfd
,由于各种原因,它都是错误的。B) 当用于单个承诺时,可以使用
$。C) 你在错误的地点将延期付款转换为承诺。
.promise
的要点是从函数返回一个承诺,而延迟的函数仍然是“私有的”。@meagar我同意代码的结构应该不同,但在这一点上被冲走,这将表明有一个承诺,我们将在以后解决
LB.getData('user', function(data) {
    // use the data here
    alert(data.someProperty);
});
setTimeout(function(){
     console.log(app.db); //return data JSON
}, 5000);
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);
      }
    );
});