首页 > 解决方案 > 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:数据被正确获取,因为我想要的只是承诺的结果。我的问题是将承诺的结果分配给一个变量。

标签: javascriptpromiseasync-awaitfetch

解决方案


看看下面的例子:

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();
}

推荐阅读