Всем привет. Давеча решал задачки на bigfrontend и дошел до своей реализации Promise.race. Хотя моя функцию и прошла все тесты на сервисе, но результат отличался от самого метода Promise.race.
Хотелось бы понять почему так.
// моковые данные
const promises = [
Promise.reject('rejected1'),
Promise.reject('rejected2'),
new Promise((res, reject) => {
setTimeout(() => res('resolvedTimeout'), 1000);
}),
Promise.resolve('resolved'),
];
Сначала я написал функцию так и она прошла тесты, но если в нее передать моковые данные, то вернется зарезолвенный promise cо строкой resolved. При этом, если передать эти входные данные в Promis.race, то естественное вернется отколненный промис rejected1.
const race = (promises) => {
return new Promise((resolve, reject) => {
const onFullfiled = (data) => {
resolve(data);
};
const onRejected = (error) => {
reject(error);
};
for (const promise of promises) {
promise.then(onFullfiled).catch(onRejected);
}
});
};
Потом я переписал функцию так:
const race = (promises) => {
return new Promise((resolve, reject) => {
const onFullfiled = (data) => {
resolve(data);
};
const onRejected = (error) => {
reject(error);
};
for (const promise of promises) {
promise.then(onFullfiled, onRejected);
}
});
};
Т.е отличие только в том, что фунция onRejected передается вторым аргументом в than. И при таком подходе, все работает как надо.
Очень хочется разобраться почему некорректно работает первый вариант