问题标签 [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 投票
2 回答
2861 浏览

c++ - pthread_once() 中的竞争条件?

我有std::future一个线程正在等待std::promise在另一个线程中设置。

编辑: 用一个将永远阻塞的示例应用程序更新了问题:

更新:如果我改用 a pthread_barrier,下面的代码不会阻塞

我创建了一个测试应用程序来说明这一点:

基本上类foo创建一个在它的运行函数thread中设置一个promise,并在构造函数中等待它promise被设置。一旦设置,它会增加一个atomic计数

然后我创建了一堆这样的foo对象,把它们拆掉,然后检查我的count.

如果我在一个有 1000 个线程的循环中运行它,它只需要执行几次,直到发生竞争并且其中一个futures永远不会被唤醒,因此应用程序会永远卡住。

如果我现在SIGABRT使用该应用程序,则生成的堆栈跟踪显示它卡在future::wait 堆栈跟踪如下:

我很确定我的代码没有做错任何事情,对吧?

这是 pthread 实现还是 std::future/std::promise 实现的问题?

我的图书馆版本是:

0 投票
2 回答
1519 浏览

java - 在 Play 中构建复杂的 promise

假设我需要从我的方法中返回一个承诺,这取决于外部资源和一些计算。我想象的是这样的:

我可以用来做callWhenReady什么?这本质上就像jQuery.promise()行为一样。

0 投票
9 回答
103907 浏览

c++ - 什么是 std::promise?

我对 C++11 和组件(例如,请参阅此答案)相当熟悉std::thread,它们std::async直截了当的。std::future

但是,我不能完全理解std::promise它是什么,它做了什么以及在什么情况下最好使用它。标准文档本身不包含超出其类概要的大量信息, std::thread也不包含。

有人可以给出一个简短的例子来说明std::promise需要 an 以及它是最惯用的解决方案的情况吗?

0 投票
2 回答
8996 浏览

jquery - jQuery 在函数中的 promise with each()

我正在尝试调用自己的函数并等到它完成。过渡结束后,我想开始下一个功能。请看看我的 jsfiddle http://jsfiddle.net/hrm6w/

console.log("upper finished") 应该在 console.log("promise finished") 并且所有动画都结束之后开始。

在每个对象中的所有动画都结束后,我想开始下一个动作(函数)。

我认为 promise() 函数是我所需要的,但我只是没有得到这个工作。

任何帮助,将不胜感激。

0 投票
3 回答
29071 浏览

node.js - 如何使用 Q 正确中止 node.js 承诺链?

我正在使用Node.js的 Q 模块,试图在我有很多步骤的情况下避免“厄运金字塔”。例如:

本质上这似乎有效;如果任何任务步骤引发错误,则将其传递给回调(尽管我欢迎改进,因为我是 node.js 承诺的新手)。但是,当我需要提前中止任务链时,我遇到了问题。例如,如果 result1 成功返回,我可能想提前调用回调并中止其余的,但我这样做的尝试失败了......

在这个例子中,我看到两个“正在中止!” 并打印“正在执行第 3 步...”。

我敢肯定,我只是在这里误解了一些基本原则,因此不胜感激。谢谢!

0 投票
2 回答
162 浏览

jquery - 如何构建“最后一个获胜”的 jQuery-Ajax 队列?

假设我在一个页面上有三个元素:

  • 接受数字联系人 ID 的文本框。
  • 一个按钮,当单击该按钮时,将向服务器发出 Ajax 请求,以获取输入到文本框中的联系人 ID 的联系人信息。
  • Adiv显示从服务器获取的联系信息。

现在假设另外两件事:

  • 预计来自服务器的往返将需要 5 秒。
  • 如果在 5 秒延迟期间,用户在文本框中输入不同的数字并单击按钮,则网页应忽略第一个 ajax 结果并接受第二个结果(即最近的 Ajax 请求)。

我的问题:

  • 我怎么能像我描述的那样实现“最后一个获胜”的 jQuery-Ajax 队列?
0 投票
1 回答
1935 浏览

javascript - 使用 jQuery .promise() 调用 clearInterval()

我最近对 ​​setInterval 和 clearInterval 进行了很多试验,以创建自己的自定义效果,而我一直在做的事情之一是清除间隔同时远离全局范围的有效方法。我正在尝试通过使用 .promise() 调用 clearInterval() 来提高可读性并探索可能的性能提升(以下是我正在尝试做的示例):

直到最近,我一直在使用嵌入式函数设置和清除间隔(示例):

PS 我很抱歉没有发布原版 - 我的版本控制系统已损坏。另外,我知道这个例子有点傻,因为我可以很容易地使用 for 循环或 .each(),但这只是一个例子——我确实有一些我不想使用循环的实例。

这是我的第一篇文章,所以如果我做的事情与公认的做法不同,我会提前道歉。请让我知道我将来是否可以做些什么来改进我的帖子——我总是乐于接受建设性的批评:)

谢谢!

0 投票
7 回答
7596 浏览

c++ - Deferred/Promise pattern in C++

I've recently discovered, and fallen in love with, the Deferred/Promise pattern used in jQuery. It just encapsulates so many async use cases, including the wonderful chaining, filtering ability, that I can't believe I missed it for so long.

I've just finished refactoring my AS3 code to use the excellent CodeCatalyst/promise-as3 library (https://github.com/CodeCatalyst/promise-as3), and so started thinking about going back to my C++ code and seeing how I could implement the pattern there.

Before I started coding this myself, I checked to see if it had been done before, and discovered the std::future/std::promise (and boost equivalents), but they are very heavy (they seem use real threads etc, and have a heavy template syntax).

So, my question is: Is there are lightweight, pure C++ implementation of the Deferred/Promise pattern, jQuery-style?

refs:

0 投票
1 回答
471 浏览

javascript - 链接多个异步函数

介绍

我有一个问题来自这个:

循环调用异步函数

一旦我得到一个使用类似承诺的模式(使用 SDK 开发的附加组件中的 jsdeferred 库)调用异步函数的循环。

我想将一个新的异步函数链接到这个请求中,例如,打开浏览器的选项卡:我不想在准备好之前继续执行。

问题

所以我明白了:

我得到的结果是,对于循环的每次迭代,它都会再次运行所有先前的请求!所以我在控制台中得到了以下日志:

显然我的预期是:

问题

很明显,我不理解承诺模式。我在两个 API 中阅读了很多内容:

第一个是我一直使用到现在的那个。当我尝试要求该库时,第二个给出错误:

所以,我的问题是你是否知道任何关于承诺的好教程或一些关于链接多个异步函数的好例子。或者如果你知道怎么做,你会怎么做。

谢谢

编辑:给出行(+)的错误

0 投票
2 回答
12826 浏览

javascript - Jquery 承诺链

我有一个简单的事件链:

  1. 从元数据表中获取列(异步)
  2. 加载选定的列(异步)
  3. 渲染列表

我过去只是将这些函数链接起来,每个函数都在完成后调用下一个函数。但是,发生了什么并不是很明显(调用getColumnsFromMeta结果是在填充视图)。因此,为了清晰和代码重用,我想使用JQuery Promises. 我以前使用过承诺。但是我如何链接两个以上?getColumnsFromMeta ().then(loadSourceFromDatabase /*some arguments*/) //.then(renderList)?;

这是一个示例getColumnsFromMeta