鉴于以下情况:
var doThings = (function ($, window, document) {
var someScopedVariable = undefined,
methods,
_status;
methods = {
init: function () {
_status.getStatus.call(this);
// Do something with the 'someScopedVariable'
}
};
// Local method
_status = {
getStatus: function () {
// Runs a webservice call to populate the 'someScopedVariable'
if (someScopedVariable === undefined) {
_status.setStatus.call(this);
}
return someScopedVariable;
},
setStatus: function () {
$.ajax({
url: "someWebservice",
success: function(results){
someScopedVariable = results;
}
});
}
};
return methods;
} (jQuery, window, document));
问题很清楚,这是一种异步情况,我想等到someScopedVariable
未定义,然后继续。
我想过使用 jQuery 的 .when() -> .done() 延迟调用,但我似乎无法让它工作。我还想过做一个循环来检查它是否已经定义,但这似乎并不优雅。
可能的选项1:
$.when(_status.getStatus.call(this)).done(function () {
return someScopedVariable;
});
可能的选项2(糟糕的选项):
_status.getStatus.call(this)
var i = 0;
do {
i++;
} while (formStatusObject !== undefined);
return formStatusObject;
更新: 我相信我为了解释它而删除了太多的逻辑,所以我添加了一些。这样做的目的是为这些数据创建一个访问器。