Так, wait / async була чудовою концепцією, але реалізація повністю зламана.
З будь-якої причини ключове слово, яке очікує, було реалізовано таким чином, що його можна використовувати лише в методі асинхронізації. Насправді це помилка, хоча ви не побачите її як таку, де тільки тут. Виправлення цієї помилки полягало б у тому, щоб реалізувати ключове слово очікування таким чином, що воно може використовуватися лише для виклику функції асинхронізації, незалежно від того, сама функція виклику є синхронною чи асинхронною.
Через цю помилку, якщо ви використовуєте функцію очікування для виклику справжньої асинхронної функції десь у вашому коді, то ВСІ ваші функції повинні бути позначені як асинхронні, і ВСІ ваші виклики функцій повинні використовувати функцію очікування.
Це по суті означає, що ви повинні додати накладні обіцянки для всіх функцій у всій своїй програмі, більшість з яких не є і ніколи не буде асинхронною.
Якщо ви насправді думаєте про це, використовуючи функцію await у функції, потрібно вимагати функції, що містить ключове слово очікування, щоб НЕ БУДЬ АСИНАК - це тому, що ключове слово очікує на призупинення обробки в функції, де знайдено ключове слово очікування. Якщо обробка в цій функції призупинена, вона, безумовно, НЕ асинхронна.
Отже, для розробників javascript та ECMAScript - будь ласка, виправте реалізацію очікування / асинхронізацію наступним чином ...
- wait може використовуватись лише для функцій асинхронізації CALL.
- чекання може з'являтися в будь-якому виді функції, синхронному або асинхронному.
- Змініть повідомлення про помилку з "await є дійсним лише у функції async" на "await можна використовувати лише для виклику функцій асинхронізації".
awaitйого можна використовувати лише всерединіasyncфункції. Тобтоawaitробить функцію асинхронною, тому її треба оголосити як таку.