问题标签 [q]

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 回答
1073 浏览

jquery - 使用 Q 和 jQuery 的 Ajax 调用

这个问题一直让我发疯。我一定在做一些非常愚蠢的事情,但我无法弄清楚它是什么。

我想将 Q Promise 库与 jQuery 一起使用。我有 0.9.6 版的 Q 和 1.9.1 版的 jQuery(都通过 bower 安装)。

这个讨论暗示(最后)这样的事情应该起作用:

我不能完全判断这是否是如何将 Q 与 jQuery 版本 1.9.1 一起使用(jQuery 显然在 promise 方面发生了很多变化)。但是,如果我从 Firefox 的控制台(当前页面加载了 Q 和 jQuery)触发它,Ajax 调用显然会被正确触发(Firebug 暗示它返回状态码为 200)。但承诺似乎已被拒绝(据我所知)。

例如,如果我这样做:

它将统计信息列为已拒绝。如果我用这样的东西触发我的承诺:

如果我查看fail作为参数传递给该方法的内容,它看起来像一个 jQuery 承诺对象(至少据我所知),它并没有真正阐明(似乎几乎不符合成为的资格)失败的“原因”)。

我尝试了各种排列和组合,但我认为我应该求助于 SO 而不是仅仅在黑暗中跌跌撞撞。

非常感谢您提供任何帮助。

0 投票
2 回答
1504 浏览

node.js - Node js avoid pyramid of doom and memory increases at the same time

I am writing a socket.io based server and I'm trying to avoid the pyramid of doom and to keep the memory low. I wrote this client - http://jsfiddle.net/QUDXU/1/ which i run with node client-cluster 1000. So 1000 connections that are making continuous requests.

For the server side a tried 3 different solutions which i tested. The results in terms of RAM used by the server, after i let everything run for an hour are:

  1. Simple callbacks - http://jsfiddle.net/DcWmJ/ - 112MB
  2. Q module - http://jsfiddle.net/hhsja/1/ - 850MB and increasing
  3. Async module - http://jsfiddle.net/SgemT/ - 1.2GB and increasing

The server and clients are on different machines. (Softlayer cloud instances). Node 0.10.12 and Socket.io 0.9.16

Why is this happening? How can I keep the memory low and use some kind of library which allows to keep the code readable?

0 投票
1 回答
753 浏览

node.js - node.js中带有Q的异步函数之间的链参数

如何链接我的两个异步函数所需的参数。

第一个函数fs.readFile在回调函数中返回文件的内容作为第二个参数。

标记的第二个函数需要此内容作为第一个参数。第二个参数是可选的,可以是一个选项对象。第三个参数是回调,它应该给我转换后的内容作为第二个参数。

目前我已经尝试过这段代码:

但它不起作用,因为标记的函数在使用回调函数作为第三个参数调用时需要第二个参数。如何设置第二个参数以正确调用标记的函数?

0 投票
1 回答
292 浏览

jquery - AngularJS 承诺不会检索深度包装的 jquery $.post 调用

我正在开发一个 javascript 库和一个 AngularJS 前端。JavaScript 库需要是可移植的,所以它不能依赖 AngularJS。我们使用一个非常标准的 servlet 查询模式:

这个queryService函数被我们库中的其他函数调用。你可以看到它queryService什么也没返回。它期望回调函数执行所有需要的操作。我不知道需要什么回调函数才能将我的结果返回到 promise 对象的then()函数。这是 Angular 服务代码:

从我的控制器中,我调用Data.getColNamesFromDb()并获得了一个承诺对象。但无论我尝试什么,我都无法让我的then()函数查看从数据库返回的内容。这是控制器:

我知道我错过了关于承诺如何运作的一些愚蠢的东西,但我看不出是什么。从我在代码中评论的一些“选项”中应该可以清楚地看出,我只是在尝试随机方法并交叉手指。

0 投票
3 回答
6575 浏览

c# - 如何在 Unity C# 脚本中使用 System.Xml.Linq?

使用统一和 c# 以及当我尝试这些行时

我收到这个错误

类型或命名空间名称Linq' does not exist in the namespace System.Xml'。您是否缺少程序集参考?

所以我在网上查了很多,发现Linq会出问题,需要在MonoDevelop中手动添加引用。所以我在那里添加了一个参考(通过右键单击解决方案窗格中的参考,单击编辑参考并浏览 System.Xml.Linq)

还是没有运气,

有任何想法吗?

0 投票
5 回答
57127 浏览

angularjs - 如何检查 Angular $q 承诺是否已解决

我知道,在使用 Promise 时,通常只会将延续代码与then()调用和链行为相结合。

但是,我想启动一个 Promise 包装的异步调用,然后单独启动 3 秒$timeout(),以便我可以采取 UI 操作,前提是原始 Promise 尚未完成。(我预计这只会发生在慢速连接、3G 移动设备等情况下。)

给定一个承诺,我可以在没有阻塞或等待的情况下检查它是否完成?

0 投票
3 回答
11524 浏览

javascript - javascript 承诺不传递所有参数(使用 Q)

我无法传递所有论点。我的承诺回调只收到一个而不是三个:

知道我做错了什么吗?

0 投票
4 回答
1960 浏览

angularjs - AngularJS 身份验证

在我走远之前,我希望有人能告诉我我是否正确处理了这种情况,或者是否有一种更简单的方法我只是想念。我们有一个使用 AngularJS 和 Web API 制作的网页。我们现在正在处理用户尝试访问某些页面时的身份验证。我们有一个名为权限的模块,我们用于此当前如下所示。

正如您所看到的,我正在使用承诺让我的电话等待我获取用户(如果有一个已登录的用户)。我有这个工作但现在我的问题是在我的网站上处理权限的任何功能看起来我也需要添加承诺和延期,因为目前调用没有等待权限函数运行。正在使用的地方的一个示例是在我的 rootScope 上的 routeChange 事件中,如下所示

所以基本上即使在权限范围内,我的函数也会推迟到用户被返回。调用这些函数的函数不会延迟,因此每次检查权限时基本上都会返回 false。我想我可以通过向权限调用添加承诺来解决这个问题,但我想知道是否有一种更简单的方法来处理我缺少的这个问题。

0 投票
2 回答
327 浏览

javascript - 在 Q 中遍历 promise

在 Scala 中,我可以获取一个值列表,在它们之间映射一个未来返回函数,并返回一个将这些未来值收集到一个列表中的未来(或因第一个错误而失败)。更具体地说:

在这种情况下,结果将只是增加的列表:

我也可以创建一个期货列表,然后将它们变成包含相同结果的未来:

这会给我同样的东西,但它会创建一个额外的中间集合,并且会更嘈杂。

我想用Q中的承诺做这样的事情,看起来Q.all或多或少sequence

有没有办法让我写一个更像traverse的版本?这是一个如此基本的操作,似乎必须有办法做到这一点,但这是我与 Q 的第一个下午,我仍在努力克服fcall和朋友的所有重载。

0 投票
1 回答
10352 浏览

javascript - 是否有一种纯粹的基于 Promise 的映射/连接集合的方法?

异步与 Q 通常

我正在学习 Node.js 开发,并试图围绕管理异步“回调地狱”的策略展开思考。我探索的两个主要策略是 Caolan McMahon 的async模块和 Kris Kowal 的基于 promise 的Q模块。

许多其他人一样,我仍在努力理解何时应该使用一个与另一个。但是,一般来说,我发现 Promise 和基于 Q 的代码直观一些,所以我一直在朝着这个方向前进。

通常映射/连接集合

但是,我仍然坚持使用 async 模块的功能来管理集合。来自 Java 和 Python 背景,大多数时候我使用集合时,逻辑如下所示:

  1. 初始化一个新的空集合,用于存储结果。
  2. 对旧集合执行 for-each 循环,对每个元素应用一些逻辑并将其结果推送到新的空集合中。
  3. 当 for-each 循环结束时,继续使用新的集合。

在客户端 JavaScript 中,我已经习惯于使用 jQuery 的map() 函数……传入第 2 步的逻辑,并将第 3 步的结果作为返回值。感觉就像是相同的基本方法。

使用 async 和 Q 映射/连接集合

节点端异步模块具有类似的mapconcat函数,但它们不会将连接的结果返回到原始范围级别。您必须改为进入回调地狱才能使用结果。例子:

由于我的其他函数正变得基于 Promise,因此我让这段代码返回一个 Promise 对象,以便它可以轻松地包含在then()链中。

我真的需要两者吗?

我正在努力表达的最终问题是:在上面的代码示例中,我真的需要 asyncQ 吗?我正在学习如何用 Q 风格的承诺链替换异步模块的控制流......但它还没有“点击”我如何使用基于承诺的方法进行集合的映射或连接。或者,我想了解您为什么不能,或者为什么这不是一个好主意。

如果我在上面的示例中使用 async 和 Q 是为了一起工作,那么就这样吧。但如果我可以单独使用 Q,我宁愿不需要额外的库依赖项。

对不起,如果我遗漏了一些非常明显的东西。异步事件驱动模型是一个非常不同的世界,我的脑袋还在游泳。