我使用异步函数设置Person.name(想想ajax调用)。不幸的是,我仍然希望从对象中使用其他函数而不必将它们放在回调中。
如何使用依赖于对象的异步设置属性的函数?
执行代码:
var user = new Person();
user.setName(); // This is async.
var is_jennifer = user.isItJennifer(); // Oh no! the user's name may not be defined yet!
...
...
var is_tom = user.isItTom(); // Much later in the code I need the async property again. I don't want to cram all of this into a callback whenever I setName.
具有异步方法setName()
的对象。
function Person() {
// Properties
this.name = null;
this.setName = function() {
this.name = NameModelThing.getName(); // Oh no! getName returns a result asynchronously.
}
this.isItJennifer = function() {
return (this.name == 'Jennifer') ? true : false;
}
this.isItTom = function() {
return (this.name == 'Tom') ? true : false;
}
}
答案 0 :(得分:1)
如果你正在为你的ajax请求使用jquery,你可以通过传入async:false作为选项来使请求不是异步的。
http://api.jquery.com/jQuery.ajax/
作为替代方案,您可以使用一种模式,在您加载页面时对Person对象进行某种初始化,并从那里使用回调:
var user = new Person();
user.fetch({
success: function() {
// code when user ready here.
}
});