有人可以针对我的Axios邮政请求提供建议吗?

问题描述 投票:0回答:1

我正在尝试使用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();
javascript post axios
1个回答
0
投票

fs.readFileSync返回数据的字符串化版本。您需要JSON.parse

const data = JSON.parse(fs.readFileSync("./temp/converted.json", "utf-8");)

使用setTimeoutsetInterval将操作发送到事件队列,使等待间隔非常困难。使用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)
        }
    }
})
© www.soinside.com 2019 - 2024. All rights reserved.