这是任务:
我写的是什么
const fetch = require('node-fetch');
const fs = require('fs');
const path = require('path');
const filePath = path.join(__dirname, 'response.json');
fetch('https://jsonplaceholder.typicode.com/posts')
.then(res => res.json())
.then(data => {
const refined = data.filter(item => item.id < 20);
const stringified = JSON.stringify(refined);
fs.appendFile(filePath, stringified, err => {
if (err) {
throw err;
}
});
});
如何使用async / await语法编写相同的提取?
答案 0 :(得分:3)
await
关键字只能在async
函数内部使用,因此您需要编写一个异步函数来发出API请求以获取数据
async function fetchData() {
const response = await fetch('https://jsonplaceholder.typicode.com/posts');
const data = await response.json();
const refined = data.filter(item => item.id < 20);
const stringified = JSON.stringify(refined);
// promise version of appendFile function from fs.promises API
await fs.appendFile(filePath, stringified);
}
nodeJS的 fs
模块具有使用promise而不是回调的函数。如果您不想使用回调版本,则需要使用appendFile
函数的Promise版本。
您可以将fs
模块的承诺版本导入为require('fs').promises
或require('fs/promises')
。
要处理错误,请确保调用此函数的代码具有catch
块,以捕获和处理可能从该函数引发的任何错误。您还可以使用try-catch
块将代码包装在此函数中,以处理该函数内部的错误。
侧面提示:如果您想以易于阅读的格式在文件中写入数据,请更改
const stringified = JSON.stringify(refined);
到
const stringified = JSON.stringify(refined, null, 4);
答案 1 :(得分:1)
以下代码段可以为您提供帮助(在节点v14中进行了测试)
const fetch = require("node-fetch")
const fs = require("fs")
const path = require("path")
const filePath = path.join(__dirname, "response.json")
async function execute() {
const res = await fetch("https://jsonplaceholder.typicode.com/posts")
const data = await res.json()
const refined = data.filter((item) => item.id < 20)
const stringified = JSON.stringify(refined)
fs.appendFile(filePath, stringified, (err) => {
if (err) {
throw err
}
})
}
execute()