使用q库在nodejs中进行循环

时间:2015-10-30 15:28:22

标签: javascript node.js q

以下是我的职能

function start(){
 var deferred = Q.defer();
  for(var i=0; i < 3; i++){
    second()
      .then(third)
      .then(fourth)
      .catch(function(error){
        console.log(error);
      });
  }
  return deferred.promise;
}

function second(){
//does an http request
// returns promise
}

function third(){
//does an http request
// returns promise
}

function fourth(){
//takes the response of second and third function
//and compares the response
//returns promise
}

以下是文件运行时的操作顺序:

second function
second function
third function
third function 
fourth function
fourth function

(我知道为什么会发生这种情况,这是由于第二和第三功能中的I / O请求)

我想要的操作顺序

second function
third function
fourth function
second function
third function
fourth function

我如何在nodejs中完成此任务?

以下是对上述问题的跟进: 如何将值传递给.then(funcCall(value))中的函数,以便当时 函数实际上被调用它也得到一个它可以工作的值。

1 个答案:

答案 0 :(得分:3)

你已经到了一半,你只需要正确连锁:

function start() {
  var deferred = Promise.resolve();
  for (var i = 0; i < 3; i++) {
    deferred = deferred.then(second)
      .then(third)
      .then(fourth)
      .catch(function(error) {
        console.log(error);
      });
  }
  return deferred.promise;
}

function second() {
  return new Promise(function(r) {
    console.log('second');
    setTimeout(r, 100);
  });
}

function third() {
  return new Promise(function(r) {
    console.log('third');
    setTimeout(r, 100);
  });
}

function fourth() {
  return new Promise(function(r) {
    console.log('fourth')
    setTimeout(r, 100);
  });
}
start();

Promise替换为Q