javascript - Angular $http.get 请求未运行成功或错误函数

标签 javascript angularjs model-view-controller angular-promise angular-http

我正在尝试向 Nutritionix v1_1 API 发出获取请求。调试时,我可以看到该函数已成功调用,并且传入了正确的数据。当该函数命中 $http.get 请求时,它会跳过其余代码(. success.error 部分),并且它不返回 promise 。我知道这个请求很好,因为我已经使用 postman 成功发出了请求。我的请求写成这样:

(此方法位于工厂内部。稍后从 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);
            });
        })
    );
};

这是来自 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);
});

最佳答案

尝试然后捕获成功和错误的状态(如果是 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);
            });
        })
    );
};

关于javascript - Angular $http.get 请求未运行成功或错误函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41400000/

相关文章:

model-view-controller - 堆栈溢出网络架构

javascript - Javascript 中的返回值和变量范围

javascript - 当 Controller 在单独的文件中时应用程序不加载

javascript - 如果在过滤器中返回空值,如何显示 'No Books Found' 行?

java - 将 JSF 理解为 MVC 框架

android - 从 MVC Web 应用程序链接到 Apple Wallet 或 Android Pay

javascript - Slickgrid - 替换 AJAX 源中的所有网格数据

php - 提交表单后仅通过 PHP 刷新 1 DIV

javascript - 带停止点的 slider

angularjs - 如何在具有多个类的 Protractor 中选择一个元素?