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

javascript - 带有 Q 承诺的串行执行

我想我误解了Q承诺的工作方式。我希望我的第一个承诺在下一个承诺开始之前解决,但这并没有发生。这是我的代码:

此代码产生:

我希望它产生:

我究竟做错了什么?

0 投票
2 回答
295 浏览

node.js - node.js 中是否有类似 Monitor for deferreds (Q) 的东西?

我想查看所有未解决的状态(如果可能,所有延迟日志:初始化、未解决、已解决/拒绝状态)。有什么机制吗?

像:Q.getAllDeferreds(),或Q.getLog()

0 投票
2 回答
997 浏览

breeze - BreezeJS 在失败保存时打破了 Q 的承诺

当查询执行失败(例如保存时违反数据库约束)我可以在控制台中看到。

应该为空:[]

这是示例(您可以在控制台中看到应该为空:[])):

http://jsfiddle.net/vMhkg/3/

我是 Breeze 和 Q 的新手,所以我的问题是:我应该忽略这个吗?还是我做错了什么?或者它可能只是一个需要报告的错误?

0 投票
1 回答
2446 浏览

javascript - 使用 Q.promises:如何捕获异步抛出?

我将 Q 用于 Promise,但是在设置一些测试时,我发现我看到了捕获返回 Promise 的函数中抛出的异步错误的方法。

我试图将它包裹在 aQ.when和链 afail和或在 aQ.fcall和 a 链下fail,但我无法让它工作。

有没有办法解决这个问题?

0 投票
2 回答
4031 浏览

node.js - q.js:我可以停止一个函数的执行,直到一个promise被实现?

举个例子:

这甚至可能吗?

我可以看到的替代方案要么总是调用 async 函数,而放弃“foo”检查,这不是最优的,但可以在代码中工作;或者只是假设 'foo' 为真,如果为假则抛出错误(要求调用者在调用异步函数本身后重试),由于显而易见的原因,这甚至更不理想。

编辑:作为临时解决方法,我发现这很有效,但这并不理想:

0 投票
2 回答
3468 浏览

node.js - 为什么 Q 延迟在 Node.js 上这么慢?

所以我在 Node.js 中创建了这个简单的测试服务器,
每当我进行直接响应时,我都会收到2200个请求/秒(快!)。当我只在它周围包裹一个简单的 Q 延迟时,它会下降到580个请求/秒(慢 4 倍!)。任何人都可以解释这种巨大的差异吗?

0 投票
1 回答
12642 浏览

javascript - 使用承诺 - 在失败处理程序中记录堆栈跟踪

我对nodejs相当陌生,所以我将更详细地解释我想要做什么。

我有一个网络服务器。如果请求失败,我想记录该异常的堆栈跟踪,但会提供错误页面而不会使服务器崩溃。

例如,处理请求的函数:

控制台的输出:

我看不到访问堆栈跟踪的方法。但是当我在 .fail-handler 中抛出异常(或者只是省略完整的 .fail-handler)时,我会在控制台上获得堆栈跟踪(但我必须重新启动服务器)。

所以我想我的问题是:

如何访问承诺失败处理程序中的堆栈跟踪?

编辑:当然,欢迎任何有关如何改进解释的提示。如果我没有说清楚,请告诉我。

0 投票
1 回答
1042 浏览

angularjs - AngularJS:“收集器”服务返回承诺;如何在函数内解决仍然传递值?

我编写了一个服务Collector来存储我的模型,它与 localStorage 和我的服务器交互。我有一个Collector.retrieveModel(uuid)从收集器检索模型的函数,首先检查 localStorage 以查看它是否已经存在,否则从我的服务器请求它。

这是它的样子:

由于它当前存在,如果模型不存在于 localStorage 中(并且调用了 remoteModel),则返回承诺,并在从服务器检索模型后履行。随后,相关的 $scopes 被更新。这按预期工作。

但是,当模型存在于 localStorage 中时,deferred 被解析,但在函数返回 promise 之前。因此,解析的值永远不会传播。

我该怎么做才能始终如一地回报承诺,但又不会过早兑现?我不想使用 $timeout。

0 投票
1 回答
1240 浏览

breeze - 让 koGrid 与 Breeze 和 Durandal HotTowel 模板一起工作

我有一个包含我试图绑定到我的视图模型的 koGrid 的 Durandal 小部件(热毛巾模板)。

我对这些技术很陌生,包括异步延迟和承诺,所以请原谅我对这些问题的无知!

视图模型从 datacontext 类中获取数据,该类仅返回 Breeze 实体管理器查询的结果(返回 Q 承诺):

在我的小部件的构造函数中,我有:

数据在“ents”变量中返回,被推入 observableArray myData,这应该可以工作......但是 koGrid 文件中出现错误:

valueAccessor() 未定义,这会阻止网格工作。

现在,如果我将执行远程查询的代码更改为:

(使用 jQuery 承诺时),它出于某种原因工作。但是,ents 变量的类型为“makePromise”,我不确定如何解决。

据我了解,这是 Breeze 无论如何都会返回的 Q 承诺,如果我使用

Q.when(queryDataContext.executeQuery('Customer', 'good')).then(function(ents) {

然后 ents 包含数据,但我又回到了 koGrid 未定义的问题。

非常感谢任何帮助!

0 投票
1 回答
354 浏览

javascript - Q - Chaining Sync Promises 处理成功和失败

这应该很简单,我希望..

我知道如何做基本的承诺链:

但是,假设我想在最终处理可以同时处理成功和失败的数据之前添加某种拦截器,例如:

我如何将它包含在我的链中?尝试了几种不同的方法,但我似乎无法让promisePrinterfn 像我期望的那样被调用。

蒂亚!