2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Quando ante finem necessitatem habet petitiones concurrentes? Exempli gratia, si interface magnam copiam notitiarum uno tempore reddit, navigatrum in reddendo vel etiam fragore impelletur. Hoc tempore, simul in batches 6 petitiones emittere possumus, ad vitandum adhaesionis vel fragoris .
Quomodo ergo ante finem imperium concurrentibus petitionibus agit?
Exempli gratia, si petitiones 20 sunt, sequi debes 3
Post primam coetus petitionem absolvet, secundus coetus petetur, et sic de aliis.
Praecipua notio est petitionem methodi et parametri in ordine condere, deinde 3 ad tempus postulare, deinde post 3 proximam petitionem peractam. Postquam singulae petitiones redeunt, eventus salvantur, et postquam omnes petitiones redditae sunt, omnes eventus redduntur.
pControl
: Concurrentia postulatio moderatoris, numerus maximus concursus transiens;
add
: Rogationem et ambitum adde;
start
: Satus postulatio, promissio reditus, transi postulatio completur.then
Omnia eventa posside;
function pControl(limit) {
const taskQueue = [] // {task: Function, params: any[]}[]
return {
add,
start
}
function add(task, params) {
taskQueue.push({
task,
params
})
}
function start() {
return runAllTasks()
}
function runAllTasks() {
const allResults = []
return new Promise((resolve) => {
runTask()
function runTask() {
if (taskQueue.length === 0) {
// 递归结束
return resolve(allResults)
}
const needRunSize = Math.min(taskQueue.length, limit)
const tasks = taskQueue.splice(0, needRunSize)
const promises = tasks.map(({
task,
params
}) => task(params))
Promise.all(promises).then((resList) => {
allResults.push(...resList)
// NOTE 递归调用的位置很关键
runTask()
})
}
})
}
}
pControl
: Hoc munus refert objectum continens add
etstart
Duo modi;add
Adjicere opera et parametros;start
Petitio incipiendi, clausura est.
runAllTasks
; Redit apromise
ac deinde innew Promise
Internus supplicium recursivelyrunTask
, runTask saltusPromise.all
Petitiones concurrentes in iudiciumPromise.all().then()
iterum vocarunTask
, unum effectum postulationum redire, et secundae petitiones exsecutioni mandare.
Clavis est ad intellegentes coetus exspectans est
.then
recursive vocamus.
Cogitans: Potestne runAllTasks impleri utens ansa?
Uti necesse est async 和 for 循环 + await
:
async function runAllTasks2() {
const allResults = []
const groupArr = []
let startIndex = 0
// 划分分组
while (startIndex < taskQueue.length) {
const arr = taskQueue.slice(startIndex, startIndex + limit)
groupArr.push(arr)
startIndex += limit
}
for (let index = 0; index < groupArr.length; index++) {
const pList = groupArr[index].map(({
task,
params
}) => task(params))
const res = await Promise.all(pList)
allResults.push(...res)
}
return allResults
}
Non potest esse in pro loop
.then
aliter ansa proxima ante ansam non exspectabit.
usus for of
Exsecutio iterativa:
async function runAllTasks2() {
const allResults = []
const groupArr = []
let startIndex = 0
// 划分分组
while (startIndex < taskQueue.length) {
const arr = taskQueue.slice(startIndex, startIndex + limit)
groupArr.push(arr)
startIndex += limit
}
// 迭代分组
const it = groupArr.entries()
for (const [key, value] of it) {
const pList = value.map(({
task,
params
}) => task(params))
const res = await Promise.all(pList)
allResults.push(...res)
}
return allResults
}
for
、 while
、 for...of
Ad structuras ansa imperativi, si effectum exspectantem in ansa consequi vis, uti debesasync
munus fascia in loopawait
,Ex servitio.then
。
forEach
、 map
、 filter
De functionibus ansa structurae tales quales effectus insidiae non sustinent, quia hae structurae ansa functionis synchronae sunt et moram non sustinent.
async
et循环
+await
Coniuncti ad effectum spei consequi inter loramenta.
promise.then
et递归
Coniuncti ad effectum spei consequi inter loramenta.
pControl
Fac idoneum default valorem, pone ad6
eo quod idem nomen domain in 6 petitiones navigatoris concurrentes sunt.Haec duo meliora sunt simplicia. Primum usum inspiciamus:
const asyncTaskControl = pControl() // 默认 6
asyncTaskControl.add(task, params1)
asyncTaskControl.add(task, params2)
// ...
asyncTaskControl.add(task, params10)
asyncTaskControl.start((res, doneSize) => {
// 获取每组请求的结果 和当前完成了多少请求
console.log(res) // [{index:number,result:data}]
console.log(doneSize)
}).then(allResults => {
// 所有请求结果
console.log(allResults)
})
Quid faciam callback initium?
Commodum est usoribus ut proventus currentium petitionum concurrentium consequi et progressum complementum computare.
p-control
NPM sarcina emissioaccessible npm i p-control
Download and use.
.then
Recursus deducta consequi exspectationem inter opera asynchrona;for
、while
Exspecta loop acasync
+ await
Adhibetur in compositione ad exspectationem inter asynchronas operas assequendas;Promise.all
Multiplices asynchronos munerum exsecutionem simul exsecutioni mandare.