각 약속 사이에 지연이 있는 연속 실행 Promise
8428 단어 delaypromiseseriesjavascript
API 서버에는 "속도 제한"이 있었고 끝점을 병렬로 호출하고 속도 제한이 내 호출을 차단하기 때문에
Promise.all
를 사용할 수 없었습니다.그래서 끝점을 순차적으로 일괄 호출하는 스크립트를 작성하고 각 호출 전에 API 서버가 차단하지 않도록 2초를 기다리기로 했습니다.
그렇게 했더니 효과가 좋아서 나눠먹으면 좋을 것 같았어요!
이 작업을 수행하는 더 좋은 방법이 있습니까?
이 작업을 수행하는 방법은
0
에서 시작하여 업데이트하려는 데이터 배열을 기반으로 추가하는 것입니다. 제가 가지고 있는 약속의 사슬에서 API 호출 전에 지연을 추가했습니다. 전달하는 값에 1을 추가하여 해당 숫자가 내 배열 길이와 같아질 때까지 데이터를 업데이트합니다.import fetch from "node-fetch";
import { data } from "./data.js";
const bearerToken = ""
const updateData = (id) => {
return fetch(
`https://www.url/${id}`,
{
method: "POST",
headers: {
"Content-Type": "application/json",
Authorization: `Bearer ${bearerToken}`,
},
}
);
};
const delay = () => {
console.log(`Waiting: 2 seconds.`);
return new Promise((resolve) => {
setTimeout(() => {
resolve("2");
}, 2000);
});
};
const startTime = Date.now();
const doNextPromise = async (id) => {
delay()
.then((x) => {
console.log(
`Waited: ${x} seconds now calling the endpoint for updating data ${data[id]}`
);
return updateData(data[id])
.then((res) => {
if (res.status !== 200) {
throw `Error updating data ${data[id]}: ${res.status}`;
}
return res.json();
})
.then((res) =>
console.log(`Response: ${JSON.stringify(res)} for data ${data[id]}`)
)
.catch((e) => console.log(`Error: ${e}`));
})
.then((res) => {
id++;
if (id < data.length) doNextPromise(id);
else console.log(`Total: ${(Date.now() - startTime) / 1000} seconds.`);
});
};
doNextPromise(0);
Reference
이 문제에 관하여(각 약속 사이에 지연이 있는 연속 실행 Promise), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/farminf/running-promises-in-series-with-a-delay-between-each-to-bypass-api-rate-limit-55hf텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)