gpt4 book ai didi

Javascript 异步返回值

转载 作者:行者123 更新时间:2023-11-28 12:35:58 25 4
gpt4 key购买 nike

正如我以为我理解了 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;

}

查看控制台日志注释。当 var page 在 switch 语句的范围之外声明时,为什么第二个返回 undefined

编辑

所以我错误地认为这是一个范围问题,但实际上这是 AMD 的异步特性造成的。

如何以相同的方法返回 require 范围内的 page 值,而不用 while 循环检查未定义?

编辑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;
});

最佳答案

您确实正确理解了范围。该内部函数中的代码确实分配给外部作用域中的变量。

您不明白的是异步行为。 require 函数采用一个回调函数,该函数将在将来的某个时候(当请求的模块可用时)被调用。然而,它会立即返回,并且控制流将导致 console.log 语句,该语句会打印 undefined - 这是 page 的值变量有当时

您应该能够认识到,由于未定义首先被记录,并且回调中的日志语句(带有对象)稍后执行 em>,即使它出现在代码上方。

关于Javascript 异步返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16947411/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com