Так же, как я думал, что я понял, объем JS ...Javascript Асинхронный Возвращаемое значение
Возьмите этот код:
function init() {
var page;
var pageName = $('body').data('page');
switch(pageName) {
// (there are more switch cases here normally...)
case 'pSearchLatest':
require(['searchresults'], function (SearchResults) {
page = new SearchResults().init();
console.log(page); // <- shows the object!
});
default:
break;
}
console.log(page); // <- undefined
return page;
}
Смотрите комментарии журнала консоли. Почему второе возвращается undefined
, когда var page
объявлен вне сферы действия оператора switch?
EDIT
Так что я ошибочно думал, что это был вопрос, но сфера его вплоть до асинхронной природы AMD.
Как я могу вернуть значение страницы в области require тем же методом без проверки цикла while для неопределенного?
EDIT 2
Я сделал это так:
function init(callback) {
case 'pSearchLatest':
require(['searchresults'], function (SearchResults) {
page = new SearchResults().init();
callback(page)
});
}
и в моей странице, которая вызывает метод оберточная инициализации():
new PageController().init(function(asyncViewController) {
App.view = asyncViewController;
});
Дубликат [Как вернуть ответ от вызова AJAX?] (Http://stackoverflow.com/q/14220321/710446) - прочитайте, что чрезвычайно полезно Q & A. Проблема не является проблемой с точки зрения объема, это вопрос времени. Обратный вызов имеет * еще не запущенный *, когда выполняется нижний «журнал». Обратный вызов 'require' работает ** последний **, * после того, как *' init' завершился. – apsillers
Что вы ожидаете от него? – j08691
Требуется вызов async – UpTheCreek