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

web-services - 多个 WS 一次调用,如何处理 Promise 对象?

我在 PlayFramework2/Scala 中开发了一个小服务器,它必须从多个 WS(REST/JSON)中检索数据,从这些 WS 中操作数据,然后组合并返回结果。

我知道如何调用一个WS,操作数据并返回一个异步响应。但我不知道如何连续调用多个 Web 服务,处理每次调用之间的数据并生成汇总答案。

例子:

  • 从 WebService A获取我喜欢的歌曲列表
  • 然后,对于每首歌曲,从 WS B获取艺术家详细信息(按歌曲调用)
  • 然后,使用AB响应生成并返回某些内容(例如聚合列表)
  • 然后,返回结果

我被 WS API ( WS.url(url).get => Promise[Response]) 的异步处理阻塞了。我必须依靠 Akka 来解决这个问题吗?

谢谢你。

0 投票
2 回答
16012 浏览

jquery - 将变量传递给 $.ajax().done()

我迷路了。如何将循环变量传递给 AJAX .done() 调用?

显然,如果我这样做,console.log(i+' '+data) obj会在每次迭代时返回对象中的最后一个键。文档让我失望。

0 投票
1 回答
894 浏览

jquery - JQuery:淡出多个对象后淡入导致闪烁

对于这个项目,我有一个框 (div),其中包含一些静态内容(包括选项卡)和可以在各种条件下更改的内容(单击、悬停和计时器)。这些动态内容视图中的每一个都位于一个单独的 div 中。

我正在尝试编写一个可以处理所有这些情况的函数,包括页面的初始加载,因为所有动态内容最初都是用 css 隐藏的。此函数采用父框,必须对其进行修改以跟踪事物,以及我希望更改为的视图。

所以,我首先淡出所有视图,以确保没有任何内容,然后淡入新视图。我很快意识到回调没有按顺序工作,所以我遇到了 promise() 函数。不幸的是,这会在我尝试过的每个浏览器(IE、Chrome 和 Firefox)中产生闪烁。在 Chrome 中,它只是偶尔出现,但在其他版本中,它几乎是恒定的。

这就是我目前代码的业务端。有没有更好的方法来做到这一点,或者有什么方法可以消除闪烁?不幸的是,这个页面大多会在行为不端的浏览器中查看。

在玩弄了延迟之后,我怀疑这个问题是时间问题。一个元素的过早删除,或者另一个元素的出现,会导致我的布局暂时改变,直到达到最终布局。我怀疑 promise() 函数实现了这样的延迟。

编辑:

我找到了一个似乎对我很有效的解决方案。由于我最初的淡出是为了处理多个视图以某种方式变得不隐藏的事件(由于其他原因,这种情况经常发生,使用 mouseenter 和 mouseleave 而不是 mouseover 和 mouseout)我决定尝试立即杀死会更好任何正在从以前的通话中消失的东西,然后做我的常规褪色:

希望这是有道理的。我以前不知道过滤器功能。很方便:)

请注意,在我的情况下,这是有效的,因为这是交换任何内容的唯一方式,并且它只会在每次调用结束时使一个元素树完全可见(或到达那里)。如果下一个还没有完成显示,它会立即被杀死并被替换。

0 投票
2 回答
1891 浏览

c++ - 用自己的版本替换 std::async 但 std::promise 应该在哪里生活?

我正在使用 vc2011,结果发现 std::async(std::launch::async, ... ) 有点错误(有时它不会产生新线程并并行运行它们,而是重用线程和一个接一个地运行任务)。当我进行昂贵的网络调用时,这太慢了。所以我想我会编写自己的异步函数。我被卡住了,std::promise 应该在哪里生活?在 1) 线程函数、2) 异步函数或 3) 调用函数中。

代码:

我似乎无法理解 std::promise 需要比 async 函数寿命更长(并且与线程一样长)的事实,因此 promise 不能作为 async func 中的局部变量存在。但是 std::promise 也不应该存在于调用者代码中,因为调用者只需要了解期货。而且我不知道如何在线程函数中实现承诺,因为异步需要在调用线程函数之前返回一个未来。我在这个问题上摸不着头脑。

有人有什么想法吗?

编辑:我在这里强调这一点,因为顶部评论有点误导。虽然允许 std::asycn 的默认值是 dererred 模式,但当显式设置 std::launch::async 的启动策略时,它必须表现得“好像”线程立即产生并运行(参见 en 中的措辞.cppreference.com/w/cpp/thread/async)。请参阅 pastebin.com/5dWCjjNY 中的示例,以了解这不是 vs20011 中所见行为的一种情况。该解决方案效果很好,并将我的实际应用程序加速了 10 倍。

编辑 2:MS 修复了这个错误。更多信息在这里:https ://connect.microsoft.com/VisualStudio/feedback/details/735731/std-async-std-launch-async-does-not-behave-as-std-thread

0 投票
5 回答
8728 浏览

javascript - 如何使用“q”模块重构猫鼬代码?

我正在使用 mongoose 将一些数据插入 mongodb。代码如下所示:

你可以看到那里有很多嵌套的回调,所以我正在尝试使用q来重构它。

我希望代码看起来像:

但我不知道该怎么做。

0 投票
2 回答
806 浏览

javascript - 为什么承诺中的“失败”不会捕获错误?

我正在尝试访问一个可能不存在的文件:

如果文件不存在,则确实会调用“失败”方法,但仅在我的应用程序停止并出现异常“找不到文件”后才会发生这种情况。只有当我为调试器按“继续”时,它才会继续执行“失败”方法..

我究竟做错了什么?我应该事先检查是否存在吗?

0 投票
1 回答
3236 浏览

c++ - std::async 使用相同的线程,我的代码没有实现并行性。

我在 Mac OS Xcode 4.3.2 std::async 上使用 C++11 使用相同的线程并且我的代码没有实现并行性。在下面的示例代码中,我想创建 10 个新线程。在每个线程中,我想计算输入变量的平方根并将结果设置为 promise。在主函数中,我想显示从线程计算的结果。我用策略启动::async 调用 std::async,所以我希望它创建一个新线程(10 次)。

但是,如果我使用 std::thread,那么我可以实现并行性。

0 投票
1 回答
1573 浏览

javascript - 我需要一些帮助承诺和 q 库

我需要一些关于语法的帮助node.js promisesnode.js在名为 q https://github.com/kriskowal/q的模块的自述文件中写了一些我不明白的东西。

为什么他们总是return先写promise

如何将带有回调的异步函数转换为返回的函数promise?我试试

我认为 2000 年之后它必须以 5 警报,但没有任何反应。

0 投票
2 回答
8804 浏览

javascript - Jquery.deferred 的语法,使同步函数返回承诺

关于如何使用 Jquery.deferred 使慢速同步函数返回一个 Promise 的快速问题。到目前为止我所做的是:

sayIt(2000) 总是通过,但“then”之后的链接函数永远不会触发。

如果我这样做:

“啊”立即出现,然后 2000 毫秒后出现“我说什么”——我想要的当然是相反的——两秒钟后我得到“我说什么”,然后是“啊”。

任何建议表示赞赏!

0 投票
1 回答
15475 浏览

javascript - 在 jQuery 的 Deferred 对象中引发错误

我有一个$.ajax承诺,想检查我的(语法上有效的)响应是否包含错误,在这种情况下触发拒绝状态。

我使用过我自己的 Promise 库,它可以轻松处理此类任务。我不太喜欢 jQuery 的Promise ( cache ) 实现及其Deferred对象,并且可能忽略了一些东西,因为我很少使用它。我认为要走的路就是使用.then(),这似乎相当复杂:

这应该返回一个在网络错误或响应出现问题的情况下被拒绝的承诺。但是返回被拒绝的延迟真的是[唯一|最佳|最短]的方法吗?

我也会就如何在 ajax 选项本身中处理此类“错误抛出响应处理程序”提供帮助,但我找不到关于它们的良好文档。


免责声明:不,我无法更改服务器响应。问题检测方法是同步的。我不想使用其他库,我对 jQuery 解决这个问题的方式特别感兴趣。