无法每 1.5 秒获取 javascript node.js 到 运行 setTimeout

Cannot get javascript node.js to run setTimeout every 1.5 seconds

我有一个简单的 javascript 文件,我 运行 在节点中。我只是想每 1.5 秒循环一次 运行。我正在使用 setTimeout(考虑使用睡眠)但无法将其设置为 运行。

我试图在下面的代码中为位于 for (let [key, value] of Object.entries(rows)) { 的 for 循环设置延迟。

查询 运行s,但是,它从不遵守我指定的 1.5 秒延迟。

非常感谢。

const fs = require('fs');
const papa = require('papaparse');
const axios = require('axios');
const apiKey = 'mySecret'

// console.log(papa);
let data = undefined;
const file = './FileWithColumnData.csv';
let content = fs.readFileSync(file, 'utf8');
let rows;

papa.parse(content, {
  header: true,
  delimiter: ',',
  complete: function(results) {
    rows = results.data

    usingFile = 'results.csv'
    if(fs.existsSync(usingFile)) {
      fs.unlinkSync(usingFile)    
    }
    
    const headerRow = 'Account Number,Name,Primary Street,Primary City,Primary State,Primary ZIP Code,District Number\n';
    fs.appendFileSync(usingFile, headerRow);

    for (let [key, value] of Object.entries(rows)) {
      setTimeout(function () {
        let newLine = '';
        let districtNumber = ''
        const address = value['Primary Street'] + ' ' + value['Primary City'] + ', ' + value['Primary State'] + ' ' + value['Primary ZIP Code']
        const addressEncoded = encodeURI(address)
        const axiosUrl = 'https://www.googleapis.com/civicinfo/v2/representatives?key=' + apiKey + '&address=' + addressEncoded

        axios.get(axiosUrl)
          .then((res) => {
            let _this = this
            const offices = res.data.offices;
            for (let [key2, value2] of Object.entries(offices)) {
              if (value2['name'] === 'Cook County Commissioner') {
                
                const districtVal = value2['divisionId']
                
                districtNumber =  districtVal.length == 63 ? districtVal.slice(-1) : districtVal.slice(-2)
                
                newLine = value['Name'] + ',' + value['Primary Street'] + ',' + value['Primary City'] + ',' + value['Primary State'] + ',' + value['Primary ZIP Code'] + ',' + districtNumber + '\n'
                fs.appendFileSync(usingFile, newLine);
              }
            }
          })
          .catch(function (error) {
            // handle error
            newLine = value['Name'] + ',' + value['Primary Street'] + ',' + value['Primary City'] + ',' + value['Primary State'] + ',' + value['Primary ZIP Code'] + ',Not Found\n'
            fs.appendFileSync(usingFile, newLine);
          })

      }, 1500);
    }
  }
});

你真的需要学习如何使用 async/await 并完全放弃 .then() 语法,这会让你的生活变得更轻松:)

const papa = require('papaparse');
const axios = require('axios');
const apiKey = 'mySecret'

import { promises } from "fs";

const file = './FileWithColumnData.csv';
let content = fs.readFileSync(file, 'utf8');
let rows;

const complete = async (results) => {
    rows = results.data;

    usingFile = 'results.csv'

    if (await promises.exists(usingFile)) {
        await promises.unlink(usingFile);
    }

    const headerRow = 'Account Number,Name,Primary Street,Primary City,Primary State,Primary ZIP Code,District Number\n';
    await appendFile(usingFile, headerRow);

    for (let [key, value] of Object.entries(rows)) {

        await new Promise(r => setTimeout(r, 1500));

        let newLine = '';
        let districtNumber = '';
        const address = value['Primary Street'] + ' ' + value['Primary City'] + ', ' + value['Primary State'] + ' ' + value['Primary ZIP Code'];
        const addressEncoded = encodeURI(address);
        const axiosUrl = 'https://www.googleapis.com/civicinfo/v2/representatives?key=' + apiKey + '&address=' + addressEncoded;

        try {
            const res = await axios.get(axiosUrl);
        } catch (error) {
            // handle error
            newLine = value['Name'] + ',' + value['Primary Street'] + ',' + value['Primary City'] + ',' + value['Primary State'] + ',' + value['Primary ZIP Code'] + ',Not Found\n'
            await appendFile(usingFile, newLine);
            continue;
        }

        const offices = res.data.offices;

        for (let [key2, value2] of Object.entries(offices)) {
            if (value2['name'] === 'Cook County Commissioner') {

                const districtVal = value2['divisionId']

                districtNumber = districtVal.length == 63 ? districtVal.slice(-1) : districtVal.slice(-2)

                newLine = value['Name'] + ',' + value['Primary Street'] + ',' + value['Primary City'] + ',' + value['Primary State'] + ',' + value['Primary ZIP Code'] + ',' + districtNumber + '\n'
                await fs.appendFile(usingFile, newLine);
            }
        }
    }
}

papa.parse(content, {
    header: true,
    delimiter: ',',
    complete
});