如何运行get json并保存为变量,然后在其他方法中使用

丹尼

我想解析一个 JSON 文件,然后将其数据存储在一个变量中并在代码的不同部分使用它。我认为为此我应该使用$.when().done(). 但是,我不知道如何传递数据。以下代码不起作用,但它显示了我想要实现的目标。

var myJSON;

function _parseJSON() {
  $.getJSON(settings.json_src).done(function(data) {
    return data;
  });
}

$.when(_parseJSON()).done(function() {
  myJSON = data;
});

function _cacheOptions() {
  console.log(myJSON.data);
};
_cacheDom();
_events();
_render();
....

我需要发生以下情况。1- 获取 JSON 2- 将其保存在一个变量中。3- 在代码中使用变量以使用其数据。

至少 JSON 数据需要在少数方法运行之前准备好。

任何想法?

提前致谢。

冰泡菜

好吧,你可以使用 Promises 来代替链接,并在你通过链时使用你传递的数据对这些数据做一些事情。

因此,如果您想要使用 promise 的示例实现,并处理传递的数据,您可以查看以下代码:

  • 检索随机图像
  • 结果传递图像 url
  • 然后使用该图像 url 预加载图像,并返回图像元素
  • 然后显示图像元素
  • 打印 console.log 语句

function retrieveData() {
  return $.when( $.getJSON('https://dog.ceo/api/breeds/image/random')
    .then( data => data.message ) );
}

function retrieveImage( source ) {
  return new Promise( (resolve, reject) => {
    const image = new Image();
    image.addEventListener( 'load', function() {
      resolve( image );
    } );
    image.src = source;
  } );
}

function displayImage( image ) {
  document.getElementById('image-container').appendChild( image );
  return Promise.resolve( true );
}

retrieveData()
  .then( retrieveImage )
  .then( displayImage )
  .then( () => console.log('all done') )
  .catch( err => console.error( err ) );
  
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="image-container"></div>

由于承诺将等待返回的承诺完成(或失败),这一切都是相互的,因此在元素显示之前不会打印日志语句。

当 1 步失败时,它将跳到catch链中的下一个在我的示例中,只有 1 个捕获(并且我没有处理来自 的错误$.getJSON),因此如果出现问题,它应该在控制台中打印一个错误。

您当然可以使用$.whenjQuery 提供语句来做几乎相同的事情,因为它返回一个Promise

因此,应用到你的代码,你应该return$.getJSON您的解析函数,然后根据链上

var myJSON;

function _parseJSON() {
  // return here, no need returning exactly what you would expect anyhow
  return $.getJSON(settings.json_src);
}

// because you returned, you can chain everything nicely together
$.when( _parseJSON() )
  // don't forget the argument here
  .then(function( data ) { myJSON = data; })
  // and these will only run after the myJSON got set
  .then( _cacheOptions )
  .then( _cacheDom )
  .then( _events )
  .then( _render );

虽然我真的建议不要使用全局变量。如果您向正在调用的函数添加参数,这些函数将独立于任何神奇变量,并且可以独立存在

请注意,如果您的任何链返回延迟对象,它将等待该延迟对象完成。

注意我们不是自己调用链中的方法,我们只是传入函数引用,所以可以按顺序调用(所以:_eventsvs _events()

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在其他方法中调用变量

我是否正确设置了此BST?如果是这样,我如何在其他方法中使用它?

如何在其他功能烧瓶中使用局部变量?

如何在Google App Engine标准环境中使用Google Cloud Build或其他方法设置环境变量?

C#,如何使用WebAPI在类中创建变量,然后可以在其他类中引用这些变量?

如何从其他方法引用变量?

如何使一个方法使用其他方法的变量?

如何使用JSR223侦听器将RESPONSE CODE保存为变量并在其他采样器中用于断言

如何存储创建的POST请求ID值以在其他方法中使用

在其他方法中使用变量?

我如何在其他函数中使用变量

如何在其他类中使用一个类中的变量?

如何在onCreat()中具有变量的值以在其他方法中使用

如何将mathematica文件的输出保存为其他格式,然后在以后使用?

如何在其他方法中使用定义的方法

如何在其他类中使用变量

如何创建全局变量并在其他页面中使用它?

如何在其他方法中使用“ _init_”的参数?

如何使用其他方法的输入?

如何在其他方法调用中使用传递的参数?

如何在其他方法中使用来自 observable 的数据?

如何将 -120 和 120 之间的 int 更改为 char(或其他保存为一个字节的简单方法)

将 firebase 快照保存为变量以在其他地方使用

如何在 CakePHP 中将员工名称列保存为其他列?

如何使局部变量在其他方法中可用

如何在其他函数中使用函数中的变量而不将变量放入类的 __init__ 方法中?

如何在javascript中使用map或其他方法创建自定义数组?

如何在其他 .py 文件中使用变量

如何将变量存储在特征中,以便可以在特征的其他方法中使用?