我有以下内容(向数组添加promise):

function processInformation() {
    var promisesArray = [];
    for(var i =0; i<a.length; i++) {
      var promise = this.getValue().then((response) => {
            this.processValue(response).then(()=> {
                  // it gets here
            });
       });
      promises.push(promise).
    }

 return $q.all(promises);
}

然后,我像这样拨打电话:

  getInformation().then((response) =>{
        // wait for the promises to be resolved
         this.processInformation().then((r) => {
           // never gets here
          });
    }).finally(()=> {
      //gets here
});

这不能按预期方式工作,因为它确实会调用finally,并且永远不会进入processInformation内部。 我也尝试使用angular.forEach而不是for循环(如其他文章所述),但它仍然无法正常工作。 但是它确实位于processValue()的内部。 有什么其他方法可以解决这个问题?

#1楼 票数:1 已采纳

您正在创建的Promise对象不会返回Promise对象,您还应该返回内部Promise的响应来解决它。

function processInformation() {
    var promisesArray = [];
    for(var i =0; i<a.length; i++) {
      var promise = this.getValue().then((response) => {
            return this.processValue(response).then((data)=> {
                  // it gets here
                  return data;
            });
       });
      promises.push(promise).
    }

 return $q.all(promises);
}

  ask by user3792159 translate from so

未解决问题?本站智能推荐:

1回复

我如何使用Promise/$q.all

我正在尝试根据以下不同条件动态捕获HTML内容。 并希望在执行函数insertHtml的所有3个部分之后执行以下DisplayContent函数。 在每一部分中,我都将数据从数据库获取到范围变量,并且它们没有问题。 我该如何实现?
1回复

$q.all用angularjs中的循环创建动态promise

我想创建一个包含第二个诺言的循环,因此每当它在我的循环中通过时,都会创建一个新的诺言: 在这段代码中,环路不工作,因为promise2只返回一个结果。 你能帮我吗?
4回复

$q.all()在then子句之前未运行所有promise

我需要完成所有的ajax调用才能启用按钮,但是在启用按钮之前,我并没有完成所有的承诺。 我所有的ajax都获得了这段代码: 每个加载函数都是一个$ http.get,如下所示: 我也尝试过这种方式: 这...但是有同样的问题: 但是,我收到消息“加载完成!!!” 在所有加载
2回复

用$q.all在promise中调用promise[重复]

这个问题已经在这里有了答案: 多个诺言并行运行,$ q.all是否需要链接? 1个答案 我有多个可以并行运行的api请求。 getlocations,getstates,get领地可以并行发出请求。 但是,一旦我从getstates()调用获得了状态列表,就需要为每个单
1回复

如何将angularjs$q.all()与异步创建的promise数组一起使用

我正在尝试使用$ q.all()等到一堆承诺被解决。 为此,我创建了一个promises数组,并将其传递给all()方法,但这似乎不起作用。 promises数组由$ resource对象返回的promise填充,它们是在每次迭代中创建的,我认为这是问题所在,因为promises数组是异步填
1回复

通过$q.all()在嵌套地图中使用Promise

我试图弄清楚我可以在$q.all()函数中使用什么承诺数据结构。 我知道我可以给它一个承诺数组和一个承诺图,但是我也可以给它一个任意深度图吗? 例如我可以做些什么: 如果我做不到,那么建议做这种事情的方法是什么? 我想知道生成的数据映射图中的原始级别。
1回复

动态推送到$q.all()promise数组

基本上我试图在角度创建一个类似于$q.all()的promise队列,除了它允许我在执行$q.all() 之后将更多的promise推送到数组上。 为了更好地解释,想象一下函数是一个单一的promise,你想为then()执行一些代码。 但是,当您等待第一个承诺解决时,您将对该函数提供第二
1回复

Angular:使用$q.all进行可选promise?

我重构了代码,使代码更整洁,没有重复。 但是我想知道在我的情况下$q.all的使用$q.all是最好的选择... 代码逻辑: 我有一个“可选”的承诺。 在一种情况下,我需要调用一个外部API(= promise),在另一种情况下,我不需要该外部调用(= no promise)。