问题标签 [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.

0 投票
4 回答
10777 浏览

c++ - std::promise 和 std::future 的非显而易见的生命周期问题

这个问题与这里的前一个问题非常相似:pthread_once() 中的竞争条件?

它本质上是相同的问题 -std::promise调用期间结束 的生命周期promise::set_value(即:在关联的未来被标记之后,但在pthread_once执行之前)

所以我知道我的用法有这个问题,因此我不能以这种方式使用它。但是,我认为这不是显而易见的。(用 Scott Meyer 的话来说:使接口易于正确使用和难以正确使用

我在下面提供一个示例:

  • 我有一个线程 ( dispatcher),它在队列上旋转,弹出一个“作业”(a std::function) 并执行它。
  • 我有一个名为的实用程序类synchronous_job,它会阻塞调用线程,直到在调度程序线程上执行了“作业”
  • std::promiseand是的std::future成员synchronous_job- 一旦future设置了,被阻塞的调用线程继续,这导致synchronous_job从堆栈中弹出并被破坏。
  • 不幸的是,此时在里面dispatcher是上下文切换的;已标记,但调用尚未执行,并且 pthread 堆栈以某种方式损坏,这意味着下一次:死锁 promise::set_valuefuturepthread_once

我希望调用promise::set_value是原子的;以这种方式使用这些类时,它需要在标记后做更多工作的事实future将不可避免地导致此类问题。

std::promise所以我的问题是:如何使用and来实现这种同步,并std::future保持它们的生命周期与提供这种同步机制的类相关联?

@Jonathan Wakely,您是否可以在内部使用一些 RAII 样式的类,condition_variable在标记future? 这意味着即使promise在调用 的过程中破坏了set_value,设置条件变量的额外工作也将正确完成。只是一个想法,不知道你是否可以使用它......

下面是一个完整的工作示例,以及死锁应用程序的堆栈跟踪:

死锁应用的堆栈跟踪:

线程 1(主线程)

线程 2(调度程序线程)

0 投票
0 回答
976 浏览

jquery - 为文件 API readAsText 创建 jQuery Promise

我正在使用文件输入元素,用户将使用该元素选择单个文本文件:

我想创建一个与加载所选文件内容的 FileReader 对象的异步事件相关联的 jQuery Promise。我在各种上下文中尝试了这样的代码,但似乎存在某种时间问题,因为我没有将内容变量传递给 then() 回调:

实际上涉及两个事件。第一个事件发生在用户单击浏览按钮并选择特定文件时。第二个事件是当 FileReader 加载了选定的文件内容时。如果有人知道如何正确打包此文件,那么我将保证在解决时保留所选文件的内容,我将不胜感激您的见解。提前致谢。

0 投票
1 回答
60383 浏览

c++ - 期货与承诺

我对未来和承诺之间的区别感到困惑。

显然,它们有不同的方法和内容,但实际用例是什么?

是吗?:

  • 当我管理一些异步任务时,我使用未来来获得“未来”的价值
  • 当我是异步任务时,我使用 Promise 作为返回类型,以允许用户从我的 Promise 中获得未来
0 投票
1 回答
410 浏览

jquery - jQuery 延迟/承诺/动画与 CoffeeScript

我想要为三件事制作动画:头部、脚部和手臂。我正在使用 jQuery 和 CoffeeScript。

我想创建一个像这样为头部和脚部设置动画的函数:

然后当脚和头完成移动时,移动手臂。

我尝试使用when/then模式,但我认为我没有正确使用它。

move_feet立即起火。这样做的正确方法是什么?

0 投票
1 回答
158 浏览

scala - 如何在给定 A 或 Promise[A] 的情况下返回单个 Promise[A]?

我有两个按预期工作的功能

  1. def getSomething: Promise[JsValue]
  2. def getSomethingElse: Promise[JsValue]

现在我想定义第三个函数 ( def getAll: Promise[JsValue]),它调用getSomething然后基于响应返回响应或getSomethingElse将其响应附加到原始响应。

我目前getAll定义如下:

这可行,但想知道是否有更短的方法来完成更规范的 scala 相同的事情?

0 投票
1 回答
1241 浏览

vb.net - VB.NET 支持 Promises/Deferreds 吗?

我对类似于 jQuery 的 Deferred 对象感兴趣。下面的链接似乎是面向线程的。当 Javascript 在单个分时线程中运行时,模型是完全不同的。

http://www.codethinked.com/net-40-and-systemthreadingtasks

0 投票
1 回答
2964 浏览

sockets - Node.js 未捕获的套接字异常 - 套接字已关闭

这就是问题所在。写入关闭的套接字时出现异常,并且异常没有被 try catch 捕获,大概是因为它在承诺中。

此外,将 process.uncaughtexception 添加到主应用程序也无济于事。

这是控制台输出:

更新:我参加了一个 Node.js 演讲,学到了一些关于异常处理的知识;显然它很糟糕并且被忽视了。它正在处理中。

0 投票
2 回答
4368 浏览

scala - 考虑到结果不能作为来自同一消息的响应,如何通过询问 Akka Actor 来获得 Promise(或 Future)

我遵循了本教程:http ://doc.akka.io/docs/akka/2.0/intro/getting-started-first-scala.html

基本上有一个主actor响应这两个消息:

我们发送消息“计算”,经过几次“结果”(来自奴隶演员)我们有正确的计算

现在我在 play2 控制器的一个动作中,我正在使用这个:

不幸的是(显然)我什么也没得到,因为Calculate消息确实回复了发件人的消息。

我想以某种方式让 Akka Actor 等待......并且当计算完成时将消息发送回发送者。

但是如何?...除非我以错误的方式建模!

0 投票
1 回答
2350 浏览

node.js - 节点:当错误未捕获时,async.foreach 静默失败,抛出异常

我将一些异步执行的“子”函数包装在 async.forEach 构造中(来自伟大的库:https ://github.com/caolan/async )

当这些子函数之一因未捕获的异常而失败时,整个节点进程将挂起。(因为回调永远不会返回到 async.forEach 构造,async.forEach 仍然认为子函数很忙)

但是我会认为至少抛出的异常会冒泡,因为我没有在任何地方捕捉到它。有没有办法配置 async.forEach 如何处理这些异常?对此进行编程真的很困难。

0 投票
7 回答
7603 浏览

javascript - 轻量级的 Promise 实现

我正在构建一个简单的图表工具。当用户选择数据源和图表类型时,将加载特定图表 (.js) 的数据和脚本,然后代码呈现图表。

目前我使用以下顺序:

  1. 加载图表脚本
  2. 加载数据
  3. 渲染图表

为了提高性能,我想实现 Promise 并并行加载脚本和数据。像 jQuery 这样的库对我的需求来说太大了(问题的重点不是对此争论),是否有更轻量级的解决方案?也许是一个 1-2 kb 的库,或者一个教程?同样,这是一个非常基本的实现,只有两个并行操作。

[更新] 我对所有回复都投了赞成票,因为它们看起来都很棒。我会在进行更多测试后报告。