- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我主要使用 Scala 和 JavaScript 等编程语言。我试图了解两种语言中如何使用异步响应式(Reactive)编程的相似点和差异。你能帮我吗?
我没有采取任何特定的 Js Promise
框架,因为似乎许多都实现了类似的规范(例如 Promise/A)。到目前为止我只使用过 Q。
似乎在 Javascript 中我们调用 Deferred
我们决定完成Promise
的对象。在 Scala 中,似乎 Promise
是您决定获得 Future
的对象单子(monad)。
谁能告诉我这是否正确?对于术语 Promise
的不同用法有什么充分的理由吗? Js 和 Scala 之间?
此外,在 Scala 中我们通常链接 Future
使用 map
等运算符进行进一步计算的 monad和flatMap
(在 Haskell 中也称为 bind
)。这些在Js中相当于什么?
我可能是错的,但在我看来,在 Js 中 then
在Promise
上两者都可以处理map
和flatMap
运营商对吗?如果是这样,是否可以获得 promise of promise of result
在 Js 中?就像我们可以获得 Future[Future[Result]]
在 Scala 中(无论如何都可以扁平化为 Future[Result]
)。
是 Js Promise
一个单子(monad)?即使方法名称与我们在 monad 文献中找到的名称并不真正匹配,似乎也是如此。
最佳答案
虽然极其相似。对于符合 Promises/A+ 规范的 JavaScript Promises,.then
并不是真正的单子(monad)绑定(bind),并且 .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");
});
你是对的,标准 JS Promise 库和 A+ 规范不具有 Monadic Promise 功能。它们已经被讨论过,并且实现如 fantasy-promises存在。它们遵循不同的规范并且很少被采用。另请参阅this 。在语言设计讨论论坛中一直有关于它的讨论 - esdiscuss 和一个不进行平面映射并允许一元 promise 的一元 .chain
方法被考虑过,但不太可能实现。
这是出于务实的原因。目前的 promise 实现方式非常有用。在极少数情况下,您实际上想要一个 Future[Future
,并且通常您希望延续仅在该语言中工作。 Promise 是从 monad 中“借用”的,并且在某种意义上本身就是“monadic”。 .then
非常接近于绑定(bind),在我看来,我可以互换使用它们:)
对于大多数 Promise 库来说,在 Scala 中不可能有像 Future[Future[Value]]
这样的 Promise[Promise[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
});
两者之间还存在许多其他较小的差异,但通常您的断言是正确的。
关于javascript - Js Deferred/Promise/Future 与 Scala 等函数式语言相比,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22724883/
在 javascript 中使用 defer 属性的正确语法是什么? 我见过有两种方式: 1: ... 2: ... 根据经验 [和我找不到的引用资料],我更倾向于使用第二个选项,但我只是仔细检查了
有什么区别 var dfd = new $.Deferred 和 var dfd = $.Deferred 在哪些情况下需要使用 new 与不使用它? 最佳答案 jQuery official doc
给定使用 Promise 构造函数的代码 let promise = () => new Promise(resolve => resolve(1)); new Promise((resolve, r
我正在研究 RxKotlin,问题出现了:defer() 和 defer{} 有什么区别 最佳答案 defer() 和 defer {} 只是写同一件事的两种方式。 Kotlin 在某些特定情况下允许
我正在尝试使用 Python 在 Google App Engine 上执行此操作: def add_to_db(person): a = PersonDb(key_name = perso
所以我有一个延迟对象数组dataCalls。 目前我正在使用以下方法来解雇所有这些,并在所有 Deferreds 解决后调用回调: $.when.apply(null, dataCalls) .
考虑以下几点: function foo(){ // Returns the jQuery deffered below. var urlToUse; $.ajax({
我刚刚看到此代码已被弃用,我一直在尝试遵循此指南:http://www.codelord.net/2015/09/24/$q-dot-defer-youre-doing-it-wrong/以正确的方式
我有一些元素,其中一些代码依赖于其他 中的代码元素。我看到了defer属性在这里可以派上用场,因为它允许推迟执行代码块。 为了测试它,我在 Chrome 上执行了这个:http://jsfiddle
我需要向 jQuery 的 .when() 监视的函数添加未知数量(仅在运行时已知)的 .pipe() 调用。这些调用将基于另一个异步操作的 ajax 调用。请参阅下面的代码以获得更清晰的解释: $.
我正在使用 GAE 的“deffered” ' 库 (python),它会在出现异常时自动重试任务。 有没有办法知道(在任务处理函数中)任务已尝试的次数? 我的最终目标是实现如下内容: if num_
我有几个 元素,其中一些代码依赖于其他 中的代码元素。我看到了defer属性在这里可以派上用场,因为它允许代码块在执行中被推迟。 为了测试它,我在 Chrome 上执行了这个:http://jsfi
在我看来,两者都做同样的事情。 文档: deferred.always() deferred.then() 最佳答案 看起来deferred.then()允许您传递两个单独的成功和失败回调,而 def
我正在使用 Twisted 编写代码,但在为我的扭曲互联网延迟变量想出一个合理的变量名时遇到了麻烦。这是我的候选人: d :太通用,太短,违反了 pylint 规则 C0103。 def :与内置函数
是否存在这样的情况:调用 .callback() 或 .errback() 会向调用者引发异常,而该异常不会被延迟捕获? 假设我有以下延迟和回调: from twisted.internet impo
这是代码: http://jsbin.com/lizami/edit?js,console 将代码也粘贴到此处: var aaa = $.Deferred(); var bbb = function(
这是我的尝试: deferred.defer(class1().method1, class2.method2, arg) deferred.defer(class1().method1, class
我正在尝试使用 google.appengine.ext.deferred 来运行任务。我正在将一个方法传递给 defer() 方法,该方法成功运行,但在返回时抛出一个 ValueError: F
这个问题在这里已经有了答案: What's the difference between a Deferred object and its own promise object? (3 个答案)
我下载了一个名为 jsdeferred 的库来尝试帮助我解决一些代码流问题,但我有点迷茫,因为它的示例和...“文档” 在某些事情上有点不清楚。但是当我继续阅读和挖掘,当然还有谷歌搜索阳光下的一切时,
我是一名优秀的程序员,十分优秀!