Да, асинхронная функция обычно не является чистой, поскольку она вступает в противоречие с требованием № 2: никаких побочных эффектов.
Большинство вещей, для которых мы используем асинхронные функции, по своей природе побочно: I / O,сетевые вещи, таймеры.Но даже если мы их игнорируем, одни обещания полагаются на какое-то глобальное состояние для их асинхронности: цикл обработки событий.Как правило, это не вписывается в наше определение чистоты.
С другой стороны, мы можем просто игнорировать их, когда спорим о чистоте наших функций, так же, как мы игнорируем все низкоуровневые эффекты и тайминги, которыевычисления на нашей реальной машине.Если вы хотите утверждать, что ваша асинхронная функция является чистой, вы должны всегда указывать это предположение явно.Когда вы спорите об эквивалентности двух асинхронных значений, вам необходимо иметь сложное представление о том, как моделировать асинхронные эффекты, например, при оценке Promise.race
.