放弃Togther Q承诺

时间:2017-02-06 17:48:07

标签: javascript promise q

我正在学习JS的承诺,并在我对事物的理解方面取得了一些进展,但不确定如何将其与returnQ.all

结合使用

所以说我有一个函数:(getParentsForLocation返回一个承诺)

    function doBusiness() {

    return Q.all(
    locations.map(function(item, currentIndex) {
         return getParentsForLocation(item.id)
        .then(function(res) {
             return checkParent(res, currentIndex)
          }

        });
    }))
    .then(_.uniq(locations))
  }

然后跟着这个,即在该地图遍历locations数组中的所有元素之后,我想运行下划线的uniq函数:_.uniq(someArrayIHave);

  1. 我是否需要将其放在Q.all([])中? \
  2. 如果是这样,它会顺序运行该数组中的每个方法吗?
  3. 我认为我需要对doBusiness()函数执行某些操作,例如返回一些承诺,但不确定那会是什么样的?
  4. 任何帮助表示感谢。

    非常感谢。

1 个答案:

答案 0 :(得分:1)

  

我是否需要将其放在Q.all(…)

是。你的map()电话会给你一系列承诺。

  

如果是这样,它会顺序运行该数组中的每个方法吗?

没有。或者至少,我们不知道,他们可以在内部做任何事情。

  

我认为我需要对doBusiness()函数执行某些操作,例如回报一些承诺

是。从我的promise rules of thumb如果函数执行异步操作,它必须返回一个promise。对于两个回调函数也是如此。

  

看起来怎么样?

function doBusiness() {
    return Q.all(locations.map(function(item, currentIndex) {
//  ^^^^^^ ^^^^^^
        return getParentsForLocation(item.id)
//      ^^^^^^
        .then(function(res) {
            return updateDB(res, currentIndex);
//          ^^^^^^
        });
    }));
//    ^
}