Учитывая следующее:
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
не станет неопределенной, а затем продолжить.
IЯ думал об использовании отложенного вызова .when () -> .done () в jQuery, но я не могу заставить его работать.Я также подумал о создании цикла, который бы просто проверял, определен ли он, но это не выглядит элегантно.
Возможный вариант 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;
ОБНОВЛЕНИЕ: Полагаю, я вычеркнул слишком много логики, чтобы объяснить ее, поэтому добавил в некоторые.Целью этого было создание средства доступа к этим данным.