0

Я пытаюсь сделать запрос на питание для vii_1 api. При отладке я вижу, что функция успешно вызвана и передаются правильные данные. Когда функция обращается к запросу $http.get, она пропускает остальную часть кода (.success и .error), и она не возвращает обещание , Я знаю, что запрос хорош, потому что я сделал успешные запросы, используя почтальон. Я запрос написан как:Угловой запрос http.get не работает или работает с ошибками

(Этот метод находится внутри завода Это позже вызывается из контроллера..)

let getNutrients = (foodId) => { 
    let authPart =`appId=${NUTRITIONIXAPIKEY.appId}&appKey=${NUTRITIONIXAPIKEY.appKey}`; 
    let filter = 'fields=item_name,item_id,brand_name,brand_id,item_type,nf_calories,nf_total_carbohydrate,nf_dietary_fiber,nf_cholesterol,nf_total_fat,nf_sugars,nf_sodium,nf_protein,images_front_full_url,nf_serving_size_qty,nf_serving_size_unit,nf_servings_per_container'; 
    // let sort = 'sort: {"field":"_score", "order":"desc"}'; 
    // let typefilter = '"filters":{"not": {"item_type":3}}'; 
    return (
     $q((resolve,reject) =>{    
      $http.get(`https://api.nutritionix.com/v1_1/item?id=${foodId}&${filter}&${authPart}`) 
      .success((response) => { 
       console.log('nutrix response nutrients request', response); 
       resolve(response); 
      }).error(function(errorResponse){ 
       console.log('nutrix fail nutrients request', errorResponse); 
       reject(errorResponse); 
      }); 
     }) 
    ); 
}; 

здесь фабричный метод вызова от контроллера:

NutrixFactory.getNutrients(foodId).then(function(nutrients){ 
    console.log('nutrients returned', nutrients); 
    // $scope.nutrients = $scope.nutrients || []; 
    $scope.nutrients.push(nutrients); 
    console.log('nutrients array', $scope.nutrients); 
}); 
+3

Почему снова используется $ q? потому что $ http также использует $ q –

+0

http://stackoverflow.com/questions/31193217/angular-js-http-success-vs-q-resolve –

+0

@ShankarShastri У меня нет твердого ответа для этого. Так меня научили делать запрос. Я думаю, что это может иметь какое-то отношение к MVC. Я вызываю эту функцию из контроллера, а затем цепляю. Then на вызов функции для обработки возвращенных данных. – tks2n

ответ

2

попробовать то и поймать восстановлены успеха и ошибки, если его 1.6. *

Deprecation Notice

let getNutrients = (foodId) => { 
    let authPart =`appId=${NUTRITIONIXAPIKEY.appId}&appKey=${NUTRITIONIXAPIKEY.appKey}`; 
    let filter = 'fields=item_name,item_id,brand_name,brand_id,item_type,nf_calories,nf_total_carbohydrate,nf_dietary_fiber,nf_cholesterol,nf_total_fat,nf_sugars,nf_sodium,nf_protein,images_front_full_url,nf_serving_size_qty,nf_serving_size_unit,nf_servings_per_container'; 
    // let sort = 'sort: {"field":"_score", "order":"desc"}'; 
    // let typefilter = '"filters":{"not": {"item_type":3}}'; 
    return (
     $q((resolve,reject) =>{    
      return $http.get(`https://api.nutritionix.com/v1_1/item?id=${foodId}&${filter}&${authPart}`) 
      .then((response) => { 
       console.log('nutrix response nutrients request', response); 
       resolve(response); 
      }).catch(function(errorResponse){ 
       console.log('nutrix fail nutrients request', errorResponse); 
       reject(errorResponse); 
      }); 
     }) 
    ); 
}; 
+0

Даже если это pre 1.6.x, все равно следует использовать' .then() 'и' .catch() ' – Baruch