node.js - 如何在节点 js 中使用计时器发出 api 请求?
问题描述
我有一个包含一些数据的数组,并且必须为每个数据项发出一个 api 请求。api 将保持不变,但每次发出 api 请求时数组索引都会增加。此外,必须以 5 分钟的间隔调用 api 请求。因此我不能一次调用整个数组的 api。使用请求正文中的 Array[0] 进行一次 api 调用,5 分钟后使用请求正文中的 Array[1] 进行 api 调用。我尝试实现具有这些要求的 cron 作业,但是在带有 api 调用的 for 循环中没有合适的 cron 作业示例。任何帮助,将不胜感激。`
const array = ['http://linkedin.com/charles123', 'http://linkedin.com/darwin123' ... ]
//API needs to be called every 5 minutes
const sendConnectionRequest = () => {
var i = 0;
for(i; i< array.length, i++) {
fetch("serverurl:123", {
headers: {
'Content-Type': 'application/json'
},
method: "POST",
body: JSON.stringify(array[i])
})
.then((res) => if(res) { console.log('Connection Request Send') } )
}
}`
解决方案
我可以建议使用异步生成器,这将允许您管理顺序承诺。
const fetch = require("node-fetch");
const sleep = require("util").promisify(setTimeout);
async function* responseGenerator(urls) {
let iterations = 0;
while (urls.length) {
const [url, ...rest] = urls;
urls = rest;
if (iterations > 0) {
await sleep(50000);
}
yield fetch("serverurl:123", {
headers: {
"Content-Type": "application/json"
},
method: "POST",
body: JSON.stringify(url)
});
iterations += 1
}
}
const array = ['http://linkedin.com/charles123', 'http://linkedin.com/darwin123' ]
for await (const response of responseGenerator(array)) {
// response.status
// response.statusText
// response.contentType
}
推荐阅读
- python - 使用两个数据库时,Django中的表不存在错误
- rtf - 同一文档中的 BI 发布者肖像景观
- python - 无法写入 y/n 以继续在 kaggle 中安装库
- spring - 理解 Spring Integration 上 Http GET 请求的正确配置的问题
- hibernate - 在刷新之前保存瞬态实例:com.bookstore.domain.security.UserRole.role -> com.bookstore.domain.security.Role
- javascript - 在 .ejs 文件中使用 .js 文件中的函数
- sql - 查找没有特定类型相关行的事务
- python - 使用 SMOTE 库在 Python 中平衡数据
- java - JavaFX SpringBoot SpringJDBC SQLite CRUD 应用程序 - 配置
- javascript - Javascript datetimepicker 获取变化的价值