【问题标题】:ExpressJS creating multiple JSON objects with helper functionExpressJS 使用辅助函数创建多个 JSON 对象
【发布时间】:2021-01-13 13:30:18
【问题描述】:

我正在尝试使用具有不同查询参数的 FourSquare API 的外部调用来创建多个 JSON 对象,但我的代码一直作为成功的响应代码返回,没有可读的结果。这是我尝试使用的代码:

async function getPlaces(query, lat, lon, clientID, clientSecret, versionDate) {
    const URL = `https://api.foursquare.com/v2/venues/search?client_id=${clientID}&v=${versionDate}&ll=${lat},${lon}&intent=browse&radius=10000&query=${query}&limit=10&client_secret=${clientSecret}`;
    const response = await fetch(URL).catch(e => { console.log(e) });
    const data = await response.json().catch(e => { console.log(e) });

    return data;
}

当我像这样调用这个函数来创建一个 JSON 对象时

const beachData = getPlaces("beaches", lat, lon, clientID, clientSecret, versionDate);

然后返回如下:

Promise { <pending> }

我试过了,结果一样

const beachData = getPlaces("beaches", lat, lon, fourSquareClientID, fourSquareClientSecret, versionDate).then(({ beachData }) => { beachData; });

任何关于我做错了什么的指导将不胜感激。如果我没有完全偏离目标,我希望能够多次调用此函数并获取一些 JSON 对象,我稍后可以将响应组合回前端。谢谢!

【问题讨论】:

  • 我不明白你怎么知道你需要等待promise返回函数fetch()却不知道你需要等待promise返回函数getPlaces()
  • 经过审查,这是一个疏忽,哈哈。工作到很晚,肯定忽略了这一点。谢谢指出,哈哈。

标签: javascript json express async-await


【解决方案1】:

如果你尝试记录fetch的返回值;

let x = fetch(URL);
console.log(x);

你会得到:

Promise { <pending> }

所以解决办法当然是await吧:

let x = await fetch(URL);

同样,你需要await你的函数:

const beachData = await getPlaces("beaches", lat, lon, clientID, clientSecret, versionDate);

【讨论】:

    猜你喜欢
    • 2022-01-08
    • 2017-03-27
    • 1970-01-01
    • 2020-10-21
    • 1970-01-01
    • 2019-08-02
    • 1970-01-01
    • 2017-10-10
    • 1970-01-01
    相关资源
    最近更新 更多