问题标签 [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.
c++ - std::promise 和 std::future 的非显而易见的生命周期问题
这个问题与这里的前一个问题非常相似:pthread_once() 中的竞争条件?
它本质上是相同的问题 -std::promise
调用期间结束 的生命周期promise::set_value
(即:在关联的未来被标记之后,但在pthread_once
执行之前)
所以我知道我的用法有这个问题,因此我不能以这种方式使用它。但是,我认为这不是显而易见的。(用 Scott Meyer 的话来说:使接口易于正确使用和难以正确使用)
我在下面提供一个示例:
- 我有一个线程 (
dispatcher
),它在队列上旋转,弹出一个“作业”(astd::function
) 并执行它。 - 我有一个名为的实用程序类
synchronous_job
,它会阻塞调用线程,直到在调度程序线程上执行了“作业” std::promise
and是的std::future
成员synchronous_job
- 一旦future
设置了,被阻塞的调用线程继续,这导致synchronous_job
从堆栈中弹出并被破坏。- 不幸的是,此时在里面
dispatcher
是上下文切换的;已标记,但调用尚未执行,并且 pthread 堆栈以某种方式损坏,这意味着下一次:死锁promise::set_value
future
pthread_once
我希望调用promise::set_value
是原子的;以这种方式使用这些类时,它需要在标记后做更多工作的事实future
将不可避免地导致此类问题。
std::promise
所以我的问题是:如何使用and来实现这种同步,并std::future
保持它们的生命周期与提供这种同步机制的类相关联?
@Jonathan Wakely,您是否可以在内部使用一些 RAII 样式的类,condition_variable
在标记future
? 这意味着即使promise
在调用 的过程中破坏了set_value
,设置条件变量的额外工作也将正确完成。只是一个想法,不知道你是否可以使用它......
下面是一个完整的工作示例,以及死锁应用程序的堆栈跟踪:
死锁应用的堆栈跟踪:
线程 1(主线程)
线程 2(调度程序线程)
jquery - 为文件 API readAsText 创建 jQuery Promise
我正在使用文件输入元素,用户将使用该元素选择单个文本文件:
我想创建一个与加载所选文件内容的 FileReader 对象的异步事件相关联的 jQuery Promise。我在各种上下文中尝试了这样的代码,但似乎存在某种时间问题,因为我没有将内容变量传递给 then() 回调:
实际上涉及两个事件。第一个事件发生在用户单击浏览按钮并选择特定文件时。第二个事件是当 FileReader 加载了选定的文件内容时。如果有人知道如何正确打包此文件,那么我将保证在解决时保留所选文件的内容,我将不胜感激您的见解。提前致谢。
c++ - 期货与承诺
我对未来和承诺之间的区别感到困惑。
显然,它们有不同的方法和内容,但实际用例是什么?
是吗?:
- 当我管理一些异步任务时,我使用未来来获得“未来”的价值
- 当我是异步任务时,我使用 Promise 作为返回类型,以允许用户从我的 Promise 中获得未来
jquery - jQuery 延迟/承诺/动画与 CoffeeScript
我想要为三件事制作动画:头部、脚部和手臂。我正在使用 jQuery 和 CoffeeScript。
我想创建一个像这样为头部和脚部设置动画的函数:
然后当脚和头完成移动时,移动手臂。
我尝试使用when
/then
模式,但我认为我没有正确使用它。
move_feet
立即起火。这样做的正确方法是什么?
scala - 如何在给定 A 或 Promise[A] 的情况下返回单个 Promise[A]?
我有两个按预期工作的功能
def getSomething: Promise[JsValue]
def getSomethingElse: Promise[JsValue]
现在我想定义第三个函数 ( def getAll: Promise[JsValue]
),它调用getSomething
然后基于响应返回响应或getSomethingElse
将其响应附加到原始响应。
我目前getAll
定义如下:
这可行,但想知道是否有更短的方法来完成更规范的 scala 相同的事情?
vb.net - VB.NET 支持 Promises/Deferreds 吗?
我对类似于 jQuery 的 Deferred 对象感兴趣。下面的链接似乎是面向线程的。当 Javascript 在单个分时线程中运行时,模型是完全不同的。
sockets - Node.js 未捕获的套接字异常 - 套接字已关闭
这就是问题所在。写入关闭的套接字时出现异常,并且异常没有被 try catch 捕获,大概是因为它在承诺中。
此外,将 process.uncaughtexception 添加到主应用程序也无济于事。
这是控制台输出:
更新:我参加了一个 Node.js 演讲,学到了一些关于异常处理的知识;显然它很糟糕并且被忽视了。它正在处理中。
scala - 考虑到结果不能作为来自同一消息的响应,如何通过询问 Akka Actor 来获得 Promise(或 Future)
我遵循了本教程:http ://doc.akka.io/docs/akka/2.0/intro/getting-started-first-scala.html
基本上有一个主actor响应这两个消息:
我们发送消息“计算”,经过几次“结果”(来自奴隶演员)我们有正确的计算
现在我在 play2 控制器的一个动作中,我正在使用这个:
不幸的是(显然)我什么也没得到,因为Calculate消息确实回复了发件人的消息。
我想以某种方式让 Akka Actor 等待......并且当计算完成时将消息发送回发送者。
但是如何?...除非我以错误的方式建模!
node.js - 节点:当错误未捕获时,async.foreach 静默失败,抛出异常
我将一些异步执行的“子”函数包装在 async.forEach 构造中(来自伟大的库:https ://github.com/caolan/async )
当这些子函数之一因未捕获的异常而失败时,整个节点进程将挂起。(因为回调永远不会返回到 async.forEach 构造,async.forEach 仍然认为子函数很忙)
但是我会认为至少抛出的异常会冒泡,因为我没有在任何地方捕捉到它。有没有办法配置 async.forEach 如何处理这些异常?对此进行编程真的很困难。
javascript - 轻量级的 Promise 实现
我正在构建一个简单的图表工具。当用户选择数据源和图表类型时,将加载特定图表 (.js) 的数据和脚本,然后代码呈现图表。
目前我使用以下顺序:
- 加载图表脚本
- 加载数据
- 渲染图表
为了提高性能,我想实现 Promise 并并行加载脚本和数据。像 jQuery 这样的库对我的需求来说太大了(问题的重点不是对此争论),是否有更轻量级的解决方案?也许是一个 1-2 kb 的库,或者一个教程?同样,这是一个非常基本的实现,只有两个并行操作。
[更新] 我对所有回复都投了赞成票,因为它们看起来都很棒。我会在进行更多测试后报告。