javascript - 在 Javascript 异步函数之外访问 JSON 数组元素
问题描述
我有以下脚本:
async function getJobs () {
const response = await fetch('https://redhat.jobs/jobs/feed/json');
json = await response.json();
console.log("inside getJobs fuction " + json);
}
jobs = getJobs();
console.log("outside getJobs function" + jobs);
第一个 console.log 显示了我期望的 json 响应。outside getJobs function[object Promise]
但是,我在控制台中看到了第二个日志。
我认为这里发生的事情是我需要等待getJobs 运行/完成,然后再将结果分配给jobs
变量?或者我的方法一开始就完全错误。
只是为了提供更多上下文,我希望 getJobs 一次,然后我想用应用程序中的作业数组做一些事情。
解决方案
fetch(url)
并且response.json()
都返回一个 Promise。你可以用 Promises 做的是使用一个.then()
语句。这允许您在 Promise 解决后执行一些代码。关于您上面的代码,您会注意到,如果您按原样运行它,您会得到:
"outside getJobs function[object Promise]"
"inside getJobs fuction [object Object], [object Object], ..."
这是因为getJobs()
返回一个 Promise。所以:
jobs = getJobs();
console.log("outside getJobs function" + jobs);
console.log()
在收到来自 的 Promise 后立即执行getJobs()
。只有当 Promise 被解决时,你才会得到任何有用的东西,所以你要确保你console.log()
只在Promise 被解决后才调用。
您可以通过使用.then()
语句来做到这一点。在此处了解有关它们的更多信息。这使您可以同步处理此代码。你甚至不必担心异步(在我看来,getJobs()
当 Promise 链接可以很好地完成工作时,这会使代码更加混乱)。我会像这样实现上面的:
function getJobs() {
var result = fetch('https://redhat.jobs/jobs/feed/json');
console.log('result inside getJobs is a Promise')
return(result)
}
getJobs().then(function(response){
return response.json();
})
.then(function(jobs){
console.log('result after promise chain is ' + jobs)
}
);
推荐阅读
- google-chrome - chrome浏览器的地址栏自动完成是如何工作的
- python - 仅当未在 Python 类中定义时才覆盖使用自变量
- python-3.x - 明智地取出所有类型的电影
- python - 如何根据另一个对象的位置使某物旋转
- char - 乳胶表:在表格单元格中包含“\ n”?
- json - 如何为 Apache Flink 创建自定义 POJO
- android - 关于 Android 的 Firebase 身份验证 SHA1 的问题
- powershell - 任务计划 | 我正在尝试安排一个 .ps1 文件,但每次调度程序运行时都会出现一个弹出窗口“你想如何打开这个文件?”
- python - 如何将一个扩展名的一个目录的所有文件合并到一个文件夹中
- android - Gradle 构建过程失败