任务如下:
我写的是:
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语法编写相同的fetch?
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);
}
fs
模块的nodeJS有使用promise而不是回调的函数.如果你不想使用回调版本,你将需要使用promise版本的appendFile
函数。
您可以将fs
模块的promise版本导入为要求('fs')。
要处理错误,请确保调用此函数的代码有一个catch
块来捕获和处理可能从此函数引发的任何错误。您还可以使用try catch
块包装此函数中的代码,以处理此函数中的错误。
附带提示:如果您想以易于阅读的格式在文件中写入数据,请更改
const stringified = JSON.stringify(refined);
到
const stringified = JSON.stringify(refined, null, 4);
下面的代码片段可以帮助您(在节点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()