Javascript 如何从回调函数返回var?OOP属性
为什么会这样?如何在没有设置超时的情况下获取property app.db 及 我可以不收缩地从回调函数返回变量吗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
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);
}
);
});