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