15

我正在尝试将 node-fetch 与 nodejs 一起使用来对我的个人 api 进行 api 调用。我希望能够在此定期同步更新某些值,因为在幕后我的数据库会更新/更改。我知道 async 和 await 存在,但是通过我所有的谷歌搜索,我仍然不太了解它们或它们如何与 fetch 请求交互。

这是我试图开始工作但仍然只是记录未定义的一些示例代码

const fetch = require('node-fetch');
const url = 'http://example.com';
let logs;

example();
console.log(logs);
async function example(){
    //Do things here
    logs = await retrieveLogs();
    //Do more things here
}

async function retrieveLogs(){
    await fetch(url)
    .then(res => res.json())
    .then(json => {return json})
    .catch(e => console.log(e))
}
4

4 回答 4

13

我认为您需要像这样返回retrieveLogs 函数结果:

async function retrieveLogs(){
    return await fetch(url)
    .then(res => res.json())
}
于 2018-09-03T08:57:44.210 回答
4

正如 Ali Torki 在评论中所说,fetch()它是一个异步功能,无论如何都不能“进行”同步。如果您必须与 HTTP 同步获取(例如,因为您必须在不能异步的属性 getter 中使用它),那么您必须使用不同的 HTTP 客户端,句号。

于 2020-05-13T13:19:06.717 回答
2
npm install sync-fetch

围绕 Fetch API 的同步包装器。在后台使用 node-fetch,也用于一些输入解析代码和测试用例。

https://www.npmjs.com/package/sync-fetch

于 2021-03-09T14:22:50.817 回答
0

使用立即调用的异步函数表达式:

(async () => {
  try {

    const response = await fetch('http://example.com')
    const json = await response.json()

  } catch (error) {
    console.log(error);
  }
})();
于 2020-12-14T07:42:31.013 回答