问题内容: 考虑以下以串行/顺序方式读取文件数组的代码。返回一个promise,仅当依次读取所有文件后,promise才会解析。 上面的代码有效,但是我不喜欢必须递归使事情顺序发生。有没有更简单的方法可以重写此代码,这样我就不必使用怪异的函数了? 最初我尝试使用,但是这导致所有调用同时发生,这 不是 我想要的: 问题答案: 2017年更新 :如果环境支持,我将使用异步功能: 如果需要,可以使用异步
除非我误解了什么,否则resolves和rejects(https://facebook.github.io/jest/docs/expect.htmlet.resolves)在vNext之前都是不可用的。现在/同时,用玩笑来检验诺言的推荐方法是什么?难道这只是把期望放在那里和抓到吗? 例如: 2019年6月15号更新:在我发布这个问题后不久,Jest就开始支持这个开箱即用。我改变了下面接受的答案
问题内容: 我正在使用茉莉花对angularjs控制器进行单元测试,该控制器在范围内将变量设置为调用返回promise对象的服务方法的结果: 服务内部: 在我的angularjs应用程序上下文中,这可以正常工作,但在茉莉花单元测试中则无法工作。我已经确认“ then”回调在单元测试中正在执行,但是$ scope.myVar承诺永远不会设置为回调的返回值。 我的单元测试: 另外,如果我将控制器更改为
问题内容: 根据Michal Charemza帖子编辑。 我有一个代表angularui模态对话框的服务: 如果用户单击对话框中的“确定”,则在调用delete方法时将执行。 问题是我无法对此进行单元测试。 这是我的考验。我已经正确注入了q服务,但是我不确定应该从间谍那里返回什么… 但是我正在接受。这意味着…部分没有执行。我想念什么? 问题答案: 要模拟返回承诺的函数,它还需要返回承诺,然后需要将
问题内容: 我一直在尝试发现如何将MongoDB与Node.js一起使用,并且在文档中似乎建议的方法是使用回调。现在,我知道这只是一个优先事项,但我真的更喜欢使用诺言。 问题是我没有找到如何在MongoDB中使用它们。确实,我已经尝试了以下方法: 结果是。在那种情况下,看来这不是这样做的方法。 有什么方法可以在Node内部使用带有promise而不是回调的mongo db吗? 问题答案: 您的方法
问题内容: 我无法通过所有论点。我的诺言回调仅收到一个,而不是三个: 知道我在做什么错吗? 问题答案: Q的Promise 只能有一个参数- Promise代表一个单一的值,而不是它们的集合。如果需要多个值,则将它们显式放入数组中。对于多参数回调,您可以使用。
问题内容: 在我的服务器应用程序中,当用户无权访问端点时,我想返回“禁止”值。 为此,我创建了一个被拒绝的重用承诺: 然后在应用程序中的其他位置: 但是,当我启动我的应用程序时,会收到警告 我怎么能告诉Node这个Promise可以解决呢? 问题答案: 我创建了被拒绝的重用承诺 好吧,仅创建一个可重用的函数可能会容易得多: 每次调用该错误时,也会为该错误提供适当的堆栈跟踪。 我怎么能告诉Node这
问题内容: 我有一个简单的JavaScript可以加载声音: 我有一项执行以下功能的服务: 我想要的是对声音的简单承诺,所以当我调用它时,我会遇到类似以下情况: 那有可能吗? 问题答案: 您可以实施设置: 现在您可以致电: 由于音频元素的缓冲行为,因此没有意义。指示预加载将告诉浏览器您要播放音频文件。在我看来,这对于客户端和系统也更好。
问题内容: 在我的应用程序中,我必须获取一些JSON数据并将其分配给数组,然后再加载页面。这是我使用CardService服务获取JSON的代码: 在控制器的resolve块中,我具有以下内容: 在实际的控制器中,我有以下内容: 问题是,服务中的fetchCards函数似乎在将JSON数据分配给cards变量之前就解决了诺言。这导致我的视图中加载了空白数据,直到刷新两次并很幸运为止。 我可以确
问题内容: 我保证会绑定到我的UI中。当承诺解决并且UI元素呈现后,我可以单击该UI元素。在我处理点击的控制器代码中,我要根据诺言的价值行事。至此,在我的角度代码中,我已经知道诺言已经解决了..但是当我想要获得价值时,它仍然是诺言。 鉴于我知道必须兑现承诺,获得承诺价值的最佳方法是什么? 问题答案: 承诺永远是诺言- 那就应该如此。尽管可以将诺言直接绑定到视图,但我通常不鼓励这种做法,因为它缺乏透
问题内容: 我遇到了问题,我的指令只有在我的诺言得到解决后才能呈现其内容。我以为应该这样做,但是似乎没有用。 这是我的控制器: 我的指令: 范围返回还可以,当我在开发工具中检查它时并没有定义,但是我想这是因为到我检查它时,诺言已经解决了吗? 但是,返回undefined。 问题答案: 因为您的值是异步填充的,所以您需要添加一个监视函数来更新绑定的元素。 您还可以将很多复杂性转移到指令控制器中,并使
问题内容: 升级到1.2后,我的服务返回的promise行为有所不同…简单服务myDates: 在早期版本中,我可以在控制器中执行以下操作: 从getDates返回的promise可以直接绑定到Select元素。现在这不起作用,我被迫在控制器中对promise进行回调,否则数据将无法绑定: 文档仍然说: $ qpromise由模板引擎以角度识别,这意味着在模板中,您可以将附加到作用域的promis
问题内容: 我有一个对象列表。对象将传递给延迟函数。我只想在上一次调用解决后才使用下一个对象调用函数。有什么办法可以做到吗? 问题答案: 在ES2017之前和之后(请参见下文中的ES2017中的选项),如果要等待诺言就不能使用,因为诺言没有阻塞。Javascript和Promise不会那样工作。 您可以链接多个promise,并使promise基础结构对它们进行排序。 您可以手动进行迭代,并且仅在
问题内容: 我在尝试在Angularjs中测试基于承诺的代码时遇到了困难。 我的控制器中有以下代码: 我想对以下情况进行单元测试: 什么时候被调用 当是做了应该改变的位置(调用) 在我看来,没有简单的方法可以分别测试这两种情况。 我要做的第一个测试是: 现在,要测试第二种情况,我需要创建另一个永远不变的虚假承诺。这一切都非常乏味,并且有很多样板代码。 还有其他测试方法吗?还是我的设计有异味? 问题
问题内容: 在Angulardocs中,它提到您可以将“超时”配置设置为数字或承诺。 超时 – {number | Promise} –超时(以毫秒为单位),或承诺应在解决后中止请求。 但是我不确定如何使用诺言使这项工作成为现实。我如何设定数字和承诺?基本上,我希望能够知道http调用(承诺)是否由于“超时”或其他原因而出错。我需要能够分辨出差异。谢谢你的帮助 !!! 问题答案: 此代码来自$ht