С учетом следующего кода:
const ports = [null,3001];
function getPort(port)
{ return new Promise((resolve, reject) =>
{ // setTimeout to simulate getting port from OS
setTimeout(() =>
{ if(port < 3010)
{ return reject();
}
return resolve();
}, 2000);
});
}
ports.reduce(async (acc, port, index) =>
{ if(!port)
{ return;
}
try
{
const avail = await getPort(port);
return port;
}
catch(avail)
{ ports.push(++port);
}
});
Почему функция сокращения вызывается только для элементов null
и 3001
, а не 3002
, хотя в конце reduce
вызываетсяМассив ports
равен [null, 3001, 3002]
?
До завершения последнего вызова Reduce в исходном массиве уже есть новый элемент, так почему он также не вызывается для этого элемента?
Цель кода - попытаться найти доступный порт, начиная с заданного числа и увеличивая его до тех пор, пока мы не найдем его, или пока не достигнем верхнего предела.
Есть другие способы сделать это, но reduce
Метод казался самым лаконичным, пока я не попал в этот тупик.