问题标签 [promise]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
javascript - CommonJS 中的“承诺”抽象有什么好处?
我正在阅读这篇文章,关于承诺抽象的部分对我来说似乎有点过于复杂。下面给出一个例子:
在我看来,以下代码可以用更少的代码行提供相同的结果:
factorial - Unlambda d 函数
我想我需要详细说明 D 函数在 unlambda 中的工作原理。现在我正在尝试使用 Y 组合器创建一个函数(阶乘),但它总是会导致某种无限循环。或段错误,取决于解释器。我很确定 D 是我想在这里使用的。我试过这个:
它有相同的无限循环。有人认为他们可以帮助我理解 unlambda 中的 D 吗?
...
在 unlambda 表示法中,我的功能是
我很确定如果它被正常评估,首先是左边,它会起作用,但我不确定。
提前致谢。
javascript - 理解 Node.js 中的 Promise
据我了解,调用异步代码的方式有以下三种:
- 事件,例如
request.on("event", callback);
- 回调,例如
fs.open(path, flags, mode, callback);
- 承诺
我找到了node-promise 库,但我不明白。
有人可以解释一下承诺的全部内容以及我为什么要使用它吗?
另外,为什么从 Node.js 中删除它?
clojure - Clojure 期货和承诺有何不同?
futures 和 promises 都会阻塞,直到它们计算出它们的值,那么它们之间有什么区别呢?
jquery - jQuery 延迟和承诺 - .then() 与 .done()
我一直在阅读有关 jQuery 延迟和承诺的信息,但我看不出使用.then()
&.done()
成功回调之间的区别。我知道Eric Hynds提到了这一点.done()
并.success()
映射到相同的功能,但我猜也是如此,.then()
因为所有回调都是在成功操作完成时调用的。
谁能告诉我正确的用法?
scala - 是否等待 Scala Future 阻塞线程?
当我等待Scala Future 的结果时,它的行为更像是receive还是像react一样,即它是阻塞线程,还是在结果可用时安排继续?
scala - 尾递归和 scalaz 承诺
我目前正在玩 Scalaz 非阻塞期货。承诺。我正在努力使以下函数尾递归:
wherep
是一个带有 type 的谓词,是一个带有 typeI=>Boolean
的f
并发函数I=>Promise[I]
。
该方法在没有注释的情况下编译。
有什么提示吗?谢谢
jquery - jquery deferred 把失败变成成功
因此,在使用 jQuery 延迟并$.when
并行加载许多对象时。
现在,b.ajax()
有时会失败,但我实际上不在乎。我只想等到所有调用都完成后再调用complete()。
不幸的是,一旦b
失败,就会when()
拒绝,并且永远不会触发then()
回调。这是 AFAIK 的预期行为$.when()
,但在这种情况下不适合我。
我实际上想要一种方式说:
或者也许有不同的使用方式when()
,或更合适的构造?
multithreading - 在 Linux 2.6+ 中替换系统调用(syscalls)
我正在考虑编写一个用户态线程库,因为在这个领域似乎没有积极的工作,我相信 C++0x 的承诺和未来可能会给这个模型一些力量。不幸的是,为了使这个模型工作,必须确保阻塞调用的上下文切换。因此,我想拦截每个系统调用,以便用异步版本替换它。有一些警告:
- 我知道几乎每个常规系统调用都有异步系统调用,但出于向后兼容性的原因,这不是一个可行的解决方案。
- 我知道在 Linux 2.4 或更早版本中可以直接更改 sys_call_table,但这已经消失了。
- 因为我希望我的库在需要时被静态链接,所以 LD_PRELOAD 技巧是不可行的。
- 同样,内核模块也不是一个选项,因为它应该是一个用户态库。
- 最后,出于类似原因, ptrace() 也不是一个选项。我不能让我的图书馆为了使用而分叉一个新进程。
这可能吗?