javascript - Await fetch 返回一个承诺,而不是数据
问题描述
我正在从电子表格中获取和处理数据,如下所示:
const getJsonSheet = async () => {
const response = await fetch('<FETCH-SPECIFIC-SPREADSHEET-LINK>');
const data = await response.json();
let cells = await data.feed.entry;
let table = {
massa:[],
description:[],
price:[],
imgLink:[]
};
await cells.map( cell => {
if ( parseInt(cell.gs$cell.row) > 1) {
let rowValue = parseInt(cell.gs$cell.row) - 2;
let inputValue = cell.gs$cell.inputValue;
switch (cell.gs$cell.col) {
case "1":
table.massa[rowValue] = inputValue;
break;
case "2":
table.description[rowValue] = inputValue;
break;
case "3":
table.price[rowValue] = inputValue;
break;
case "4":
table.imgLink[rowValue] = inputValue;
break;
default:
console.log('Cell out of range.')
}
}
})
return table;
};
export default getJsonSheet;
我在另一个文件中导入并执行 getJsonSheet(),将它的值分配给一个变量,然后我 console.log 这个变量。我希望将表对象记录到控制台中,但实际上记录了一个 Promise。但是,此记录的承诺已完成,并具有“表”对象作为结果。我还没有完全理解 Promises、async 和 await - 我是这个特定主题的新手。
有没有办法将“表”对象直接分配给变量,以便我可以使用它在其他地方操作 DOM?
PS:数据被正确获取,因为我想要的只是承诺的结果。我的问题是将承诺的结果分配给一个变量。
解决方案
看看下面的例子:
async function f3() {
const y = await 20;
return 5;
}
console.log(f3());
印刷:
Promise {<pending>}
但是这个:
async function f3() {
const y = await 20;
return 5;
}
console.log(await f3());
印刷:
5
如果您希望 return ,您console.log
需要位于执行堆栈顶层或另一个异步函数中5
,如下所示:
async function f3() {
const y = await 20;
return 5;
}
async function f_another() {
return await f3();
}
推荐阅读
- pycharm - Pycharm 没有显示打印输出,但它在 Spyder 中显示
- vuejs2 - VUEJS V-FOR 表现怪异
- javascript - 从数组中过滤数组
- android - 当我生成一个 android 应用程序包时,它失败并显示“buildOutput.apkInfo 不能为空”
- excel - VBA 中的 HTMLBody 与正文 - 超链接的格式问题
- python - 为什么我的程序没有显示我告诉它的命中框?
- ruby-on-rails - 无法在 ElasticBeanstalk 上部署 Rails 5 VueJS 应用程序
- python - MongoDB:从集合中获取每个文档
- apache-spark - 如何使用 Airflow 运行并行 Spark 作业
- html - HTML 中的 Word 表格行为不正确