-
Notifications
You must be signed in to change notification settings - Fork 4.4k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
06-promises-tasks.js #58
Comments
"вроде как понимаю, что из стека вызова они все равно уходят в асинхронное web API" -> нет, не понимаешь. |
в тестах не учтено, что промисы могут резолвиться разное количество времени и соответственно значения могут поменять свой порядок в результирующем массиве если их туда пушить, а не присваивать по индексу, а так же конфиг линтера настроен таким образом, что он не позволяет создать счётчик и написать проверку, что бы резолвить результирующий массив, когда, количество в нем значений (без пустот) будет соответствовать исходному массиву с промисами |
Ну как я себе это вижу:
Т.о. даже если время резолва промиса = 0, то он все равно попадет в web api, там мгновенно зарезолвится и затем то, что он вернул попадет в Task Queue, а оттуда обратно в стек уже после того, как все синхронные задачи в стеке будут выполнены |
Я заметил что тут неправильно сделаны тесты.
Если я все так понял - суть промисов в асинхронности, но тесты принимают синхронный код
потому что использутеся
const promises = [ Promise.resolve(1), Promise.resolve(2), Promise.resolve(3) ]
которые резолвятся тут же
Я вроде как понимаю, что из стека вызова они все равно уходят в асинхронное web API, оттуда попадают в Task Queue и уже потом возвращаются в stack.
Но тем не менее просто синхронный код через for проходит тесты. А если добавить реальной задержки промису:
const promises = [ new Promise((res) => { setTimeout(() => res(1), 1000) }), Promise.resolve(2), Promise.resolve(3) ]
вот тогда все сломается как и положено и синхронный код уже не пройдет тест
The text was updated successfully, but these errors were encountered: