0

I am trying to make a get request to the nutritionix v1_1 api. When debugging I can see that the function is successfully called and the correct data is passed in. When the function hits the $http.get request it skips over the rest of the code(the .success and .error parts), and it doesn't return the promise. I know the request is good because I have made successful requests using postman. I have the request written like:

(This method is inside of a factory. It is later called from a controller.)

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);
            });
        })
    );
};

here is the factory method call from the controller:

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);
});
14
  • 3
    Why are using $q again? because $http also uses $q Commented Dec 30, 2016 at 17:16
  • stackoverflow.com/questions/31193217/… Commented Dec 30, 2016 at 17:16
  • @ShankarShastri I don't have a solid answer for that. It's how I was taught to make the request. I think it might have something to do with MVC. I am calling this function from a controller then chaining a .then on the function call to process the returned data. Commented Dec 30, 2016 at 17:23
  • Which Version Of Angular? Commented Dec 30, 2016 at 17:30
  • 1
    @tks2n Angular will only run your callbacks once the request completes. You may be looking in the wrong place for your problem... Commented Dec 30, 2016 at 17:48

1 Answer 1

2

try then and catch instated of success and error if its 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);
            });
        })
    );
};
Sign up to request clarification or add additional context in comments.

1 Comment

Even if it's pre 1.6.x should still use .then() and .catch()

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.