纯函数可以异步吗?

时间:2018-10-06 15:20:04

标签: javascript ecmascript-6 functional-programming purely-functional

在定义纯函数时,通常会定义两个特征:

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

2)不应产生任何副作用

是否还暗示纯函数不应该异步?如果没有,怎么办?如果是的话,我很想看看JavaScript中异步纯函数的一些示例。

2 个答案:

答案 0 :(得分:6)

是的,异步函数通常不是纯函数,因为它与要求2相冲突:没有副作用。

我们使用异步功能的大多数事物本质上都是副作用:I / O,网络内容,计时器。但是,即使我们忽略了这些承诺,它们的异步也只能依靠某种全局状态:事件循环。这通常不符合我们对纯度的定义。

另一方面,我们在争论函数的纯度时可以简单地忽略那些,就像我们忽略现实计算机上计算所具有的所有低层影响和时序一样。如果您想证明您的异步函数是纯函数,则应始终明确声明该假设。当争论两个异步值的等效性时,您将需要对如何建模异步效果有一个复杂的想法,例如在Promise.race的评估中。

答案 1 :(得分:2)

是的,异步函数与常规函数没有什么不同,不同之处在于异步意味着它返回Promise<T>而不是T,也就是说,这是与同步函数唯一的区别,它可以是纯函数,因此异步功能也可以是纯粹的

示例:

async function willBeValue<T>(value: T): Promise<T> { return await value; }
相关问题