当前位置: 首页 > 知识库问答 >
问题:

与Scala等函数式语言相比,Js延迟/promise/未来

杨昊
2023-03-14

我主要使用Scala和JavaScript之类的编程语言。我试图理解异步反应式编程在两种语言中使用的相似之处和不同点。你能帮我吗?

我不采用任何特定的Jspromise框架,因为似乎许多框架都实现了类似的规范(比如promise/a)。到目前为止我只使用了Q。

Jspromise是单子吗?它似乎是这样的,即使方法名与我们在单子文献中找到的不匹配。

共有1个答案

荆哲
2023-03-14

虽然极其相似。使用JavaScript的promise符合promise/a+规范。那么实际上并不是一元绑定,而是.map.flatmap两者都有。在.then处理程序中,当您返回一个promise时,它将递归地展开它。

Promise.delay(1000).then(function() {
    return Promise.delay(1000).then(function () {
        return Promise.delay(2000);
    }).then(function () {
        return Promise.delay(5000)
    });
}).then(function () {
    alert("This is only shown after 8 seconds and not one");
});

(小提琴)

您是正确的,标准JSpromise库和A+规范不具有一元promise。他们已经讨论过了,像幻想-promise这样的实现也存在。它们遵循differnet规范,很少被采用。也看这个。在语言设计讨论论坛中有关于它的持续讨论-ESreces,并考虑了一个不平面映射并允许monadicpromise的monadic.chain方法,但不太可能实现。

Promise.delay(1000).then(function () {
    return Promise.delay(1000).then(function () {
        return {
            wrap: Promise.delay(2000).then(function () {
                return Promise.delay(5000);
            })
        };
    });
}).then(function () {
    alert("This logs after 1 second");
    // I've also not seen a really solid use case 
    // except TypeScript type inference which is meh
});

两者之间还有许多其他较小的差异,但总的来说,你的断言是正确的。

 类似资料:
  • 本文向大家介绍GO语言延迟函数defer用法分析,包括了GO语言延迟函数defer用法分析的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了GO语言延迟函数defer用法。分享给大家供大家参考。具体分析如下: defer 在声明时不会立即执行,而是在函数 return 后,再按照 FILO (先进后出)的原则依次执行每一个 defer,一般用于异常处理、释放资源、清理数据、记录日志等。这有点

  • 在C#中,我有以下两个简单的例子: 第一个示例创建一个打印“开始”的任务,等待5秒钟打印“完成”,然后结束任务。我等待任务完成,然后打印“全部完成”。当我运行测试时,它会按预期运行。 第二个测试应该具有相同的行为,只是由于使用了async和Wait,任务内部的等待应该是非阻塞的。但是这个测试只打印“开始”,然后立即打印“全部完成”和“完成”,永远不会打印。 我不知道我为什么会有这样的行为:S非常感

  • 我不熟悉MongoDB和Scala语言 我正在使用scala语言在本地连接mongodb 我正在使用下面的依赖项 // https://mvnrepository.com/artifact/org.mongodb.scala/mongo-scala-driver libraryDependencies=“org.mongodb.scala”%%“mongo scala驱动程序”%%“4.2.3”

  • 主要内容:多个延迟执行语句的处理顺序,使用延迟执行语句在函数退出时释放资源Go语言的 defer 语句会将其后面跟随的语句进行延迟处理,在 defer 归属的函数即将返回时,将延迟处理的语句按 defer 的逆序进行执行,也就是说,先被 defer 的语句最后被执行,最后被 defer 的语句,最先被执行。 关键字 defer 的用法类似于面向对象编程语言 Java 和 C# 的 finally 语句块,它一般用于释放某些已分配的资源,典型的例子就是对一个互斥解锁,或者

  • 我们有一个20节点的Cassandra集群,运行大量读取请求(峰值约900k/sec)。我们的数据集相当小,所以所有内容都是直接从内存(OS页面缓存)提供的。我们的数据模型非常简单(只是一个键/值),所有读取都是在一致性级别1(RF 3)下执行的。 我们将JavaDatastax驱动程序与TokenAware策略一起使用,因此所有的读取都应该直接到达一个拥有请求数据的节点。 这些是从其中一个节点提

  • JavaScript 有两种方式判断两个值是否相等。 等于操作符 等于操作符由两个等号组成:== JavaScript 是弱类型语言,这就意味着,等于操作符会为了比较两个值而进行强制类型转换。 "" == "0" // false 0 == "" // true 0 == "0"