Могут ли чистые функции быть асинхронными? - PullRequest
0 голосов
/ 06 октября 2018

Проходя через определение для чистых функций, оно обычно определяется двумя признаками:

1) Должен давать одинаковый результат при одинаковом вводе

2) Не должен вызывать побочных эффектов

Означает ли это также, что чистая функция не должна быть асинхронной?Если нет, то как?Если да, я хотел бы увидеть некоторые примеры асинхронной чистой функции в JavaScript.

Ответы [ 2 ]

0 голосов
/ 06 октября 2018

Да, асинхронная функция обычно не является чистой, поскольку она вступает в противоречие с требованием № 2: никаких побочных эффектов.

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

С другой стороны, мы можем просто игнорировать их, когда спорим о чистоте наших функций, так же, как мы игнорируем все низкоуровневые эффекты и тайминги, которыевычисления на нашей реальной машине.Если вы хотите утверждать, что ваша асинхронная функция является чистой, вы должны всегда указывать это предположение явно.Когда вы спорите об эквивалентности двух асинхронных значений, вам необходимо иметь сложное представление о том, как моделировать асинхронные эффекты, например, при оценке Promise.race.

0 голосов
/ 06 октября 2018

да, асинхронные функции ничем не отличаются от обычных функций, за исключением того, что асинхронность означает, что она возвращает Promise<T>, а не просто T, при этом это единственное отличие от функций синхронизации, которые могут быть чистыми, следовательно, асинхронные функции могутбудь чистым

пример:

async function willBeValue<T>(value: T): Promise<T> { return await value; }
...