当前位置: 首页 > 面试题库 >

产生一个依赖于递归承诺的承诺

景阳曜
2023-03-14
问题内容

我有一个整数id的数组,例如

var a=[1,2,3,4,5]

并且我需要为每个ID执行异步远程调用。每个调用都是一个使用$ resource执行的WebAPI请求,并显示为Promise。

我需要创建一个接受这些ID数组的函数,然后初始化递归承诺链。该链应导致对每个ID依次进行webapi调用。这些调用不应并行,而应链接在一起。

有问题的函数返回自己一个“主要”的承诺,该承诺应根据异步Web调用的结果来解决或拒绝。也就是说,如果由于与服务器断开连接而在递归中拒绝了某些承诺,则主要承诺也将失败。在正常情况下,“主要”承诺必须在所有请求完成时解决。

如何在angularjs中完成此操作?


问题答案:

您可以使用reduce数组将承诺链接在一起。无需进行此递归。

// for angularjs: var Q = $q.when;
var p = a.reduce(function(prev, el) {
    return prev.then(function(arr) {
        return makeRequest(el).then(function(res) {
             return arr.concat([res]);
         });
    });
}, Q([]));


 类似资料:
  • 问题内容: 我想遍历HTML 5文件系统中的所有文件,并在迭代完成后开始一些事件。由于这是异步+承诺,我很难尝试掌握其工作方式。 我正在使用angularJS,并创建了一个服务来封装html 5文件系统特定的功能。 这是递归函数: 理想情况下,我想这样调用该函数,并让其返回一个承诺,一旦遍历所有文件,该承诺便会执行。 有什么技巧/想法可以实现吗? 一个想法是拥有一个诺言数组,并为每个文件/目录向该

  • 问题内容: 我有一个像这样的递归函数 我正在使用它 我注意到您好永远不会返回,因为我怀疑我在递归调用上创建了多个promise,但是我不确定如何从中返回。 如何返回每个递归创建的Promise? 编辑: 结果是 问题答案: 递归是一种功能性遗产,因此将其与功能性样式一起使用可产生最佳效果。这意味着编写接受和操作其输入(而不是依赖于外部状态)和返回值(而不是依赖于突变或副作用)的函数。 你的程序,而

  • 问题内容: 问题1:在给定的时间只允许一个API请求,因此,真正的网络请求在尚未完成的情况下排队。应用可以随时调用API级别,并且期望得到回报。当API调用排入队列时,将在将来的某个时刻创建对网络请求的承诺- 返回什么给应用程序?这样可以通过延迟的“代理”承诺来解决: 问题2:对一些API调用进行反跳动,以便随着时间的推移累积要发送的数据,然后在达到超时时分批发送。调用API的应用期望得到回报。

  • 问题内容: 我正在尝试使用递归调用从redis中获取数据,并在成员返回null时停止并返回。 所以我的数据是这样添加的: 最终数据应如下所示: 这是我正在弄乱的代码(从不同来源将它们拼凑在一起),但是我不知道自己在做什么。不知道这段代码是否有用,我可能会偏离正轨。 我可以看一下示例,从理论上看它应该如何工作,但是我无法确定它如何与q实现一起工作。任何帮助将不胜感激。 问题答案: 兑现承诺时,尽量做

  • 问题内容: 我要兑现一个承诺。关键是我真的想在第一个诺言兑现后立即访问(仍在等待中的)第二个 诺言 。不幸的是,当两个诺言都实现时,我似乎只能获得第二个诺言的解决值。 这是我想到的用例: 该功能显示文件选择器,用户可以在其中从自己的硬盘驱动器或URL中选择文件。它返回一个承诺,该承诺将在用户选择文件后立即兑现。此时,我们可能仍然必须通过网络下载所选文件。因此,我不能将所选文件作为分辨率值。相反,应

  • 问题内容: 我刚刚开始尝试在Node.js应用程序上实现Promises。现在,我正在检查用户和密码是否存在,然后使用mongodb来查找未找到用户的用户和密码,它会设置promise.reject(),但是它返回的promise太早了,它仍然处于未决状态。如果有人可以帮助或给我有关如何重构的想法,将不胜感激。 https://gist.github.com/joshbedo/8957056 问题