Может ли кто-нибудь дать совет по моему почтовому запросу Axe ios? - PullRequest
0 голосов
/ 19 марта 2020

Я пытаюсь отправить несколько объектов из массива в API, используя ax ios, я также пытаюсь ограничить количество запросов на публикацию сообщениями 1 раз в 10 секунд. У меня есть следующий код, но он ничего не дает, ни ответа, ни ошибки, ничего. Что я делаю не так?

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();

1 Ответ

2 голосов
/ 19 марта 2020

fs.readFileSync возвращает строковую версию ваших данных. Вам нужно JSON.parse it.

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

Использование setTimeout или setInterval отправляет операцию в очередь событий и делает интервал ожидания очень трудным. Использование for l oop и использование синтаксиса 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)
        }
    }
})
...