2017-02-17 28 views
1

У меня есть функция AngularJS, которая захватывает некоторые данные из базы данных. Основываясь на том, как данные заносятся в базу данных, я не получу некоторые данные, которые ищу сейчас (я возвращаю данные в течение второго или двух моих первоначальных вызовов). То, что я хотел бы сделать, это проверить результаты, полученные из базы данных, и если определенного типа еще нет, «нажать другое обещание», которое снова получит данные из базы данных. Вот моя функция до сих пор:Повторить Угловое обещание по результатам?

  function getResponses(ids,user) { 
      var deferred = $q.defer(); 
      var promises = []; 
      var idsString = ""; 

      angular.forEach(ids, function (id) { 
       idsString += "," + id; 
      }); 

      idsString = idsString.substring(1); 

      //Get Response calls retrieves the data from the database 
      promises.push(getResponse(idsString, user)); 

      $q.all(promises).then(function(results) { 
       deferred.resolve(results); 
      }); 

      return deferred.promise; 
     } 

Мой самый главный вопрос до сих пор, где бы я поставил «проверить результаты» часть? Я думаю, что он пойдет в блок $ q.all, но мне нужно сначала разрешить результаты из базы данных, или просто проверить результаты из базы данных и если они содержат все необходимые типы, разрешите ее тогда? И если это не разрешено, просто продолжайте настаивать на обещании getResponse в $ interval, пока не вернутся желаемые результаты?

Является ли то, что я прошу даже по возможности?

Благодаря

+1

Таким образом, в основном вы хотите опрашивать базу данных для значения определенного типа? Если это так, было бы логичнее создать функцию, которая принимает параметр типа и разрешает это конкретное значение. Таким образом, вы можете создать массив обещаний, ждать их всех, и когда все они будут решены, у вас есть свои ценности. –

ответ

0

Там нет необходимости производить обещание с $q.defer потому $q.all уже возвращает обещание:

function getResponses(ids,user) { 
    //var deferred = $q.defer(); 
    var promises = []; 
    var idsString = ""; 

    angular.forEach(ids, function (id) { 
     idsString += "," + id; 
    }); 

    idsString = idsString.substring(1); 

    //Get Response calls retrieves the data from the database 
    promises.push(getResponse(idsString, user)); 

    /* NOT needed 
    $q.all(promises).then(function(results) { 
     deferred.resolve(results); 
    }); 

    return deferred.promise; 
    */ 

    //INSTEAD return promise from $q.all 
    return $q.all(promises); 
}