纯函数可以异步吗?

Ani*_* K. 6 javascript functional-programming purely-functional ecmascript-6

在浏览纯函数的定义时,它通常定义为两个特征:

1)在相同输入的情况下应该产生相同的输出

2)不应产生任何副作用

它是否也意味着纯函数不应该是异步的?如果不是,怎么回事?如果是的话,我很乐意在JavaScript中看到异步纯函数的一些例子.

Ber*_*rgi 7

是的,异步函数通常不是纯粹的,因为它与需求#2冲突:没有副作用.

我们使用异步函数的大多数东西都具有固有的副作用:I/O,网络资源,计时器.但即使我们忽略了这些,承诺单独依赖某种全局状态来实现它们的异步:事件循环.这通常不符合我们对纯度的定义.

另一方面,我们可以简单地忽略那些在讨论我们函数纯度的时候,正如我们忽略了计算对我们真实世界机器的所有低级效果和时间.如果你想证明你的异步函数是纯粹的,那么你应该总是明确地陈述这个假设.在争论两个异步值的等价性时,您需要对如何建模异步效应有一个复杂的想法,例如在评估中Promise.race.