所以我在angularjs服务器中有一个方法,该方法正在调用为数组中的每个方法返回promise的方法。我正在使用下划线_each遍历数组。我想等到整个数组都处理完后再在方法中调用代码的最后一行。
所以…
function ProcessCoolStuff(coolStuffs)
{
var stuff = [];
_.each(coolStuffs, function(coolStuff)
{
//Some method using $q to return
makeStuffCooler(coolStuff).then(function(coolerStuff)
{
stuff.push(coolerStuff);
});
});
//Maybe Call a Display Method, or call event ect..
ShowAllMyCoolStuff(stuff);
}
这当然是行不通的。.循环完成,并在为每个项目完成makeStuffCooler之前调用“
ShowAllMyCoolStuff”。那么..与async方法交互的正确方法是什么,这样我的ShowAllMyCoolStuff方法将等待直到填充了集合?通常这可能是我缺乏$
q和Promise的经验,但我陷入了困境。提前致谢。
您要使用$q.all
,它需要一系列的诺言。因此,请使用map
代替each
,然后将结果传递给$q.all()
,这会给您一个等待所有结果的承诺。您甚至不需要stuff
手动填充的数组,而可以使用该新Promise的分辨率值。
function processCoolStuff(coolStuffs) {
return $q.all(_.map(coolStuffs, makeStuffCooler));
}
processCoolStuff(…).then(showAllMyCoolStuff);
问题内容: 如何编写限制Q许诺并发的方法? 例如,我有一个方法。它返回一个Q承诺。 我希望一次生成的进程不超过5个,但是对于调用代码是透明的。 我需要实现的是带有签名的功能 我可以这样称呼 我已经开始处理我的版本,但是我想知道是否有人可以检查一个简洁的实现。 问题答案: 我有一个库可以为您做到这一点https://github.com/ForbesLindesay/throat 您可以通过brow
问题内容: 这是一些基于行为的简单问题,我在下面的示例中在节点上运行时注意到了这些行为: 输出为: 1)为什么要实现在立即对已知值运行回调之前等待?为什么不够智能,以至于第一行在第二行运行之前同步发布其输出? 2)什么是之间的时间流逝和被输出?它是单个进程滴答吗? 3)能否将绩效深深包裹在承诺中而产生绩效问题?例如,即使可以有效地同步解决,它是否也要异步等待3倍的时间才能完成? 问题答案: 这实际
问题内容: 我想做一些非常简单的事情,但是我一点都不懂… 我希望依次对funcs数组的每个元素进行“处理”,然后输出如下所示: 我无法做到这一点:(应该很简单,我什么都没发现:( 问题答案: 从您的示例来看,我认为您已经看到了Q自述文件中的Sequences部分,但未能理解它。 当每个函数的输出作为输入传递给下一个函数时,原始示例使用“瀑布”模型: 但是您只想按顺序执行我们所有的函数,因此您只需将
问题内容: 为了在数据库中创建对象,我已经创建了许多许诺。 最后,我要按我想要的顺序履行所有诺言。(因为somes对象依赖于其他对象,所以我需要保持该顺序) 所以我希望看到: 不幸的是,这些消息被打乱了,我不明白。 谢谢 问题答案: 看起来您理解了Promise错误,请重新阅读有关Promise和本文的一些教程。 使用创建承诺后,它会立即被调用,因此所有函数实际上都是在创建它们时执行的,而不是在链
问题内容: 我无法通过所有论点。我的诺言回调仅收到一个,而不是三个: 知道我在做什么错吗? 问题答案: Q的Promise 只能有一个参数- Promise代表一个单一的值,而不是它们的集合。如果需要多个值,则将它们显式放入数组中。对于多参数回调,您可以使用。
问题内容: 遵循方法有效: 4个问题: 1)如果例如不好,我不想执行其余的功能,那我该如何退出(退出,中断,什么,..)? 2)我如何设置其中一些并行,其中一些串行? 3)如何在它们之间传输数据? 4)如何使以下函数从其先前结果中得到依赖? 问题答案: 您在问如何在promise中 链接 功能。 3)如何在它们之间传输数据? 4)如何使以下功能取决于其先前的结果? 返回 链中 下一个函数的数据(或