延迟for循环完成,直到返回API调用

时间:2016-04-05 12:40:10

标签: javascript angularjs angular-resource

任何人都可以帮助解决这个问题...我正在显示3月22日输入记录的页面上。我想看看第二天是否有记录,如果不是,那么我想在那之后检查记录,等等。

我遇到的问题是在发出API请求之前循环正在完成。以下是我的代码示例:

for (var d = date; d <= now; d.setDate(d.getDate() + 1)) {   
  if (checkForRecord(d,now)) {
    break;
  } else if (!checkForRecord(d, now)) {
    // continue loop..
  }
}

function checkForRecord(date, now){
  var formatDate = moment(date).format('YYYY-MM-DD');
  Record.query({_filter: {"date": formatDate}}, function(r){
    if (r.data.length > 0) {
      return true;
    } else {
      return false;
    }
  });      
}

是否有延迟循环完成直到进行API调用?

1 个答案:

答案 0 :(得分:0)

使用promise将您的函数包裹在$q.when()中,并在函数执行完毕后使用then()解析其余代码。请记住在构造函数中引用$ q。

for (var d = date; d <= now; d.setDate(d.getDate() + 1)) {   
  var promise = $q.when(checkForRecord(date, now)); // creates a promise
  promise.then(function(result){ // resolve the promise using then()
    // succescallback
    if(result){
      break;
    }
  }, function(error){
    // errorcallback
    console.log(error);
  });
}

function checkForRecord(date, now){
  var formatDate = moment(date).format('YYYY-MM-DD');
  Record.query({_filter: {"date": formatDate}}, function(r){
    if (r.data.length > 0) {
      return true;
    } else {
      return false;
    }
  });      
}

请注意,我实际上并未实现上述代码,但它应该为您提供如何解决它的大纲。