Используя Javascript, рассмотрите следующую ситуацию:
- Где-то Глубоко в стеке вызовов
- Что-то становится Обещанием
Это может происходить по ряду причин.
// a calls b, calls c, and so on.
function z(){
// Let's say this:
// return 4;
// Became this:
return new Promise( (resolve, reject) => resolve(4) );
}
Функция Y
больше не может использовать 4
, поскольку она связана в обещании. К счастью, функция Y
может await
обещание, а затем продолжить работу в обычном режиме.
Однако, чтобы использовать await
, функция Y
должна использовать ключевое слово async
, что приводит кY
чтобы вернуть обещание.
Теперь функция X
должна стать async
до await
Y
, а функция W
должна стать async
до await
X
,И снова и снова, вплоть до резервного копирования дерева вызовов.
По сути, небольшое изменение, которое вводит обещание, может потребовать серьезного рефакторинга.
Есть ли способ избежать этого