gpt4 book ai didi

Javascript/jQuery 操作顺序

转载 作者:行者123 更新时间:2023-11-30 18:52:28 26 4
gpt4 key购买 nike

我在满足条件之前执行的 if 语句中遇到一行问题。我想做的是:

  1. 检查数据(大的旧数字数组)是否已经加载。
  2. 如果没有获取它并将其加载到我的 all_data 对象中。
  3. 绘制数据(或在本例中提醒它)

这是代码(为了便于阅读,去掉了许多细节

var all_data={};

function get_data(name,rid) {
if (!all_data[name]) {
return $.get('/data.json',
{'name':name},
function(data) {all_data[name]=data;},
"json");
} else {return true}
}

function load_file(name,rid) {
if (get_data(name,rid)) { alert(all_data[name]) };
}

上面代码发生的事情是,当我执行 get_data 时,它立即警告“未定义”,因为 jQuery.get 正在返回一个(尚未完成的)请求对象。此时条目 all_data[name] 未定义。如果我等待 ~5s get 请求完成,再次运行代码将只警告“[Object Object]”,因为数据已加载。我意识到我可以在 $.get 回调和 else 语句中都放置一个函数,但这会使它不再泛化。有什么想法吗?

克里斯

最佳答案

将无论数据是否加载都需要发生的事情作为回调函数传递给 load_file 本身。这是一个通用解决方案,因为如果数据已经可用,您的回调将立即被调用,否则它会在数据可用时被调用。

同时尝试消除在每个函数中使用全局状态 all_data。尽可能将每个函数的作用域限制在本地。

有多种替代方法可以提供流畅的界面,但如果不知道加载数据后要对数据做什么,就很难提出建议。

function load_file(name, rid, fn) {
get_data(name, rid, fn);
}

load_file("..", "..", function() {
alert(all_data[".."]);
});

get_data 函数变为:

function get_data(name, rid, fn) {
if (!all_data[name]) {
return $.get('/data.json',
{'name':name},
function(data) { all_data[name]=data; fn(); },
"json");
} else { fn(); }
}

关于Javascript/jQuery 操作顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3356680/

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