Js Deferred / Promise / Future与Scala等功能语言相比

塞巴斯蒂安·洛伯(Sebastien Lorber)

我主要使用Scala和JavaScript之类的编程语言。我试图了解两种语言如何使用异步反应式编程的异同。你能帮助我吗?

我没有采用任何特定的JsPromise框架,因为似乎许多框架都实现了类似的规范(例如Promise / A)。到目前为止,我只使用过Q。


似乎在Javascript中,我们调用Deferred解析为完成的对象Promise在Scala中,似乎Promise是解析要获取Futuremonad的对象

有人可以告诉我这是否正确吗?是否有充分的理由Promise在Js和Scala之间使用不同的术语


此外,在Scala中,我们通常Future使用诸如mapflatMapbind在Haskell中也称为运算符将单子与进一步的计算链接在一起Js中的这些等效于什么?

我可能是错的,但在我看来,在JS中的then一个Promise种类同时处理的mapflatMap运营商吗?如果是这样,是否有可能获得promise of promise of resultin Js?就像我们可以Future[Future[Result]]在Scala中获得一个Future[Result]无论如何都可以将其展平)。


JsPromise是monad吗?即使方法名称与我们在monad文献中找到的方法名称不完全匹配,似乎也是如此。

本杰明·格伦鲍姆(Benjamin Gruenbaum)

是的,没有。

虽然极为相似。使用符合Promises / A +规范的JavaScript Promises.then并不是真正的一元绑定,.map并且.flatMap两者兼而有之。.then处理程序内部,当您返回承诺时,它将以递归方式解包。

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");
});

(小提琴)

您是正确的,标准的JS Promise库和A +规范不包含Monadic Promise。已经讨论了它们,并且存在诸如幻想承诺之类的实现他们遵循不同的网络规范,几乎没有采用。另请参阅在语言设计讨论论坛上一直在进行有关此问题的讨论-esdiscuss和一种.chain不能实现平面图并允许monadic承诺的monadic方法已被考虑,但不太可能实现。

这是出于务实的原因。当前实现诺言的方式非常有用。实际需要的情况很少见Future[Future,通常情况下,您只想继续使用该语言即可。从单子身上“借”,从某种意义上说是“单子”。.then非常接近的绑定,在我脑子里,我可以互换使用它们:)

在Scala中,大多数promise库都不可能有一个Promise[Promise[Value]]像aFuture[Future[Value]]那样的对象。您必须将其包装在一个对象中并具有Promise[Container[Promise[Value]]]

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
});

(小提琴)

两者之间还有许多其他较小的区别,但是通常您的主张是正确的。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章