JavaScript 가 지정 한 수량의 병발 제한 을 실현 하 는 예제 코드
3809 단어 JavaScript지정 수량병발 제한
이 문 제 는 어 두 라 는 기록 인'시간 분할(Time Slicing)이란 무엇 입 니까?'과 비슷 하지만 이번 에는 비동기 병발 수량 을 제한 하 는 것 이 다르다.
그래서 말 이 많 지 않 으 니,우리 먼저 건강 하 게 실현 합 시다.
우선 분할 배열 의 함 수 를 실현 하 겠 습 니 다.
const group = (list = [], max = 0) => {
if (!list.length) {
return list
}
let results = []
for (let i = 0, len = list.length; i < len; i += max) {
results.push(list.slice(i, i + max))
}
return results
}
여기 가 바로 지 정 된 병발 수량 에 따라 배열 을 나 누 는 것 이다.주로for
+slice
입 니 다.할 말 이 없습니다.다음은
async
+await
로 이 루어 진 요청 집합 패키지 입 니 다.우 리 는
for...of
을 통 해 모든 비동기 함 수 를 옮 겨 다 니 고async
+await
로 함수 의 집행 순 서 를 확보 한 다음try...catch
으로reject
오류 가 발생 하 더 라 도 임 무 를 계속 수행 할 수 없 도록 보장 합 니 다.
const requestHandler = async (
groupedUrl = [],
callback = () => { }
) => {
if (!groupedUrl.length) {
callback()
return groupedUrl
}
const newGroupedUrl = groupedUrl.map(fn => fn())
const resultsMapper = (results) => results.map(callback)
const data = await Promise.allSettled(newGroupedUrl).then(resultsMapper)
return data;
}
다음은 주 함수 입 니 다.
const sendRequest = async (
urls = [],
max = 0,
callback = () => { }
) => {
if (!urls.length) {
return urls
}
const groupedUrls = group(urls, max)
const results = []
console.log('start !')
for (let groupedUrl of groupedUrls) {
try {
const result = await requestHandler(groupedUrl, callback)
results.push(result)
console.log('go')
} catch { }
}
console.log('done !')
return results
}
여기 가 바로for
+async
+await
를 이용 하여 병발 을 제한 하 는 것 이다.매번 동시 다발 임무 결과 가 나 오 면 다음 임 무 를 수행 하 겠 습 니 다.우 리 는 밤 을 집행 한다.
const p1 = () => new Promise((resolve, reject) => setTimeout(reject, 1000, 'p1'))
const p2 = () => Promise.resolve(2)
const p3 = () => new Promise((resolve, reject) => setTimeout(resolve, 2000, 'p3'))
const p4 = () => Promise.resolve(4)
const p5 = () => new Promise((resolve, reject) => setTimeout(reject, 2000, 'p5'))
const p6 = () => Promise.resolve(6)
const p7 = () => new Promise((resolve, reject) => setTimeout(resolve, 1000, 'p7'))
const p8 = () => Promise.resolve(8)
const p9 = () => new Promise((resolve, reject) => setTimeout(reject, 1000, 'p9'))
const p10 = () => Promise.resolve(10)
const p11 = () => new Promise((resolve, reject) => setTimeout(resolve, 2000, 'p10'))
const p12 = () => Promise.resolve(12)
const p13 = () => new Promise((resolve, reject) => setTimeout(reject, 1000, 'p11'))
const p14 = () => Promise.resolve(14)
const ps = [p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14]
sendRequest(ps, 3, ({reason, value}) => {
console.log(reason || value)
})
OK,우 리 는 결과 가 우리 가 원 하 는 대로 되 는 것 을 보 았 다.
자 바스 크 립 트 가 지정 한 수량의 병발 제한 을 실현 하 는 예제 코드 에 관 한 글 은 여기까지 입 니 다.자 바스 크 립 트 가 지정 한 수량 병발 제한 내용 에 대해 서 는 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 많은 응원 부탁드립니다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
기초 정리 - 1문자 (String) 숫자 (Number) 불린 (Boolean) null undefined 심볼 (Symbol) 큰정수 (BigInt) 따옴표로 묶어 있어야 함 Not-A-Number - 숫자 데이터 / 숫자로 표...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.