无法让javascript node.js每1.5秒运行一次setTimeout



我在节点中运行了一个简单的javascript文件。我只是想让循环每1.5秒跑一次。我正在使用setTimeout(考虑过使用sleep(,但无法运行它。

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

然而,查询运行时,它从不接受我指定的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 Numbern';
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 Foundn'
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 Numbern';
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 Foundn'
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
});

最新更新