【发布时间】:2013-06-05 18:38:00
【问题描述】:
正如我以为我理解 JS 范围...
获取此代码:
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;
}
查看控制台日志 cmets。当 var page 在 switch 语句的范围之外声明时,为什么第二个返回 undefined?
编辑
所以我错误地认为这是一个范围问题,但它归结为 AMD 的异步特性。
如何在没有 while 循环检查未定义的情况下以相同的方法返回 require 范围内的页面值?
编辑 2
我是这样做的:
function init(callback) {
case 'pSearchLatest':
require(['searchresults'], function (SearchResults) {
page = new SearchResults().init();
callback(page)
});
}
在我调用包装 init() 方法的页面中:
new PageController().init(function(asyncViewController) {
App.view = asyncViewController;
});
【问题讨论】:
-
How to return the response from an AJAX call? 的副本——请阅读非常有帮助的问答。这个问题不是范围问题,而是时间问题。当底部
log运行时,回调尚未运行。require的回调运行 last,afterinit已终止。 -
你期望它返回什么?
-
require 调用是异步的
标签: javascript scope