我正在尝试使用axios将多个对象从数组发布到API,我还试图将发布请求限制为每10秒1个。我有以下代码,但没有给我任何东西,没有响应,没有错误,没有任何东西。我在做什么错?
const axios = require("axios");
const { auth, baseUrl } = require("./connect");
const fs = require("fs");
// POST sample data
function postSales() {
auth.then(result => {
let token = result.access_token;
const data = fs.readFileSync("./temp/converted.json", "utf-8");
setTimeout(() => {
data.forEach(sale => {
axios
.post(
`${baseUrl}/sale.json`,
{ sale },
{
headers: {
Authorization: `Bearer ${token}`,
scope: `employee:all`
}
}
)
.then(res => console.log(res))
.catch(err => console.error(err));
});
}, 10000);
});
}
postSales();
fs.readFileSync
返回数据的字符串化版本。您需要JSON.parse
。
const data = JSON.parse(fs.readFileSync("./temp/converted.json", "utf-8");)
使用setTimeout
或setInterval
将操作发送到事件队列,使等待间隔非常困难。使用for
循环并使用async
/ await
语法更加容易编写和推理。 javascript中不存在sleep
函数,但您自己做起来很容易。
const sleep = ms => new Promise((resolve) => setTimeout(resolve, ms))
auth.then(async result => {
let token = result.access_token;
const data = JSON.parse(fs.readFileSync("./temp/converted.json", "utf-8");)
for (let sale of data) {
try {
const res = await axios.post() // didn't add params, for brevity
console.log(res)
await sleep(10_000) // 10 seconds
} catch (e) {
console.error(e)
}
}
})