标签: angular-promise

angularjs处理$ resource $ promise错误

如果连接到我的API时出错,有人可以帮我弄清楚如何在我的AngularJS工厂中返回硬编码数据.我的硬编码数据位于另一个名为"dataFactory"的工厂中.感谢您的帮助.

service.factory("ScheduleFactory", ['$http', '$resource', '$q', 'dataFactory', function($http, $resource, $q, dataFactory) {
        var objFactory = {};

        objFactory.getDaysOfWeek = function(includeWeekends) {
            var days = [];
            var API  = $resource(restURL + '/daysOfWeek/');

            API.query()
                .$promise
                    .then(function(data) {
                        isEmpty = (data.length === 0);

                        if (!isEmpty) {
                            days    = data;
                        };
                    })
                    .catch(function(error) {
                        console.log("rejected " + JSON.stringify(error));

                        var data    = null;
                        days    = dataFactory.daysOfWeek;

                        console.log(days.length); // returns 5
                    });


            console.log("after promise " + days.length);  // returns 'after promise 0'

            return days;
        };
Run Code Online (Sandbox Code Playgroud)

我的dataFactory定义如下:

dataApp.factory("dataFactory", function() …
Run Code Online (Sandbox Code Playgroud)

javascript angularjs angular-resource angular-promise

3
推荐指数
1
解决办法
1万
查看次数

在嵌套的promise链中重新抛出异常

我正试图找出一种在AngularJs中链接承诺的简洁方法.我的目标是不使用$ q重写$ http承诺,而是利用$ http.xxx()方法返回promise并使用链接这一事实.在下面的代码中,我试图满足以下用例.

注意:如果我删除了内置的.catch()块,我的404将被外部catch()捕获.我尝试使用then(actionHandler,errorHandler)方法,并尝试从.catch()返回一个字符串,并尝试在.catch()中使用this.reject().

Give $scope.username is Bret 
When calling getPosts() and getting a 404 from /users 
Then scope.error has a message indicating that the user wasn't found
Run Code Online (Sandbox Code Playgroud)

//代码

angular.module('app', [])
    .controller('MainController', function ($scope, $log, $q, $http) {
        $scope.posts = [];
        $scope.message = "";

        function getUserByUserName(userName) {

            return getUsers()
                .then(function (response) {

                    var user;

                    for (var i = 0; i < response.data.length; i++) {
                        if (response.data[i].username === userName) {
                            user = response.data[i];
                            break;
                        }
                    }

                    return user;
                }).catch(function (error) …
Run Code Online (Sandbox Code Playgroud)

javascript promise angularjs angular-promise

3
推荐指数
1
解决办法
4144
查看次数

在承诺解决/拒绝后返回布尔值?

我有一个非常好的功能.我只想根据承诺返回真或假.

 //I want this function to return a simple true or false!!!
function isAppOnline() {
            var is_connected = connectivityMonitor.isInternetConnected();
            is_connected.then(function(result) {
                console.log('INTERNET_CHECK_API : app online');//works fine
                return true;//this is not being returned
            }, function(error) {
                console.log('INTERNET_CHECK_API : app offline');//works fine
                return false;//this is not being returned
            });
        }
Run Code Online (Sandbox Code Playgroud)

但是当我调用这个函数时,

is_online = isAppOnline();
Run Code Online (Sandbox Code Playgroud)

is_online总是未定义的.为什么函数不能返回一个简单的布尔值?

更新:

这就是我想要做的:我只是想打开一个弹出窗口,通知用户他已离线.我在10secs之后定期调用函数isAppOnline.这个功能已经在我的工厂中使用了一个承诺.我不想让事情过于复杂,但对我来说重要的是这个函数返回一个布尔值,所以基于此,我可以相应地采取行动.

angularjs ionic-framework angular-promise ionic

3
推荐指数
2
解决办法
2万
查看次数

Angular $ http在404上调用成功

我通过服务公开这个功能:

function getData(url) {
    return $http.get(url).then(function (response) {
        return response.data;
    });
}
Run Code Online (Sandbox Code Playgroud)

如果调用成功,一切都很好 - 我得到了一个按预期解决的承诺.

如果我传入生成404的URL,我会得到:

TypeError:无法读取未定义的属性"data"

在线上: return response.data;

我可以在Chrome的开发者工具中看到GET返回404.

为什么Angular(v1.4.7,也尝试使用v1.5.0)调用我的successCallback undefined出错了?

(我想要做的是处理调用代码中的失败.)

编辑: @jcaron指出我正确的方向.问题似乎是此配置行(由另一个开发人员编写):

$httpProvider.interceptors.push('ErrorInterceptor');
Run Code Online (Sandbox Code Playgroud)

拦截器必须有一个设计缺陷:

function ErrorInterceptor($q, $window) {
    return {
        response: function (response) {
            return response;
        },
        responseError: function (response) {
            if (response.status === 500) {
                $window.location.href = '/error';
                return $q.reject(response);
            }
        }
    };
Run Code Online (Sandbox Code Playgroud)

javascript ajax promise angularjs angular-promise

3
推荐指数
1
解决办法
718
查看次数

$ q.all为所有值返回undefined

我试图等待3个承诺,但$q.all似乎立即解决它们并返回undefined每个单值,我无法弄清楚原因:

this.doWork = function() {
  var deferred = $q.defer();
  var a = get('a'),
    b = get('b'),
    c = get('c');
  $q.all([a.promise, b.promise, c.promise])
    .then(function(values) {
      deferred.resolve(new Test(values[0], values[1], values[2]));
    }, function(reason) {
      deferred.reject(reason);
    });
  return deferred.promise;
};

function get(param) {
  var deferred = $q.defer();
  $timeout(function() {
    if (true) {
      deferred.resolve({
        value: param
      });
    } else {
      deferred.reject({
        message: "Really bad"
      });
    }
  }, 1000);
  return deferred.promise;
}
Run Code Online (Sandbox Code Playgroud)

(在实际代码中get()使用$http而不是$timeout当然).这是一个带有代码的Plnkr,任何人都可以对这个问题有所了解吗?

javascript promise angularjs angular-promise

3
推荐指数
1
解决办法
1519
查看次数

从promise返回的对象是未定义的

我试图将getstream API包装在角度服务(工厂)中

这是我的代码:

.factory('FeedStream', function($http, $q) {

    var client = stream.connect('xxxxxxxxxxx');

    return {
        feed : function() {
            $http.get('/api/feed/auth/')
            .success(function(auth) {

                var user_feed = client.feed('user', auth.user, auth.token);
                console.log(user_feed.get());

                user_feed.get().then(function(data) { 
                    console.log(data);
                    return data;
                })
            })
        },
    }
Run Code Online (Sandbox Code Playgroud)

首先,我使用端点/ api/feed/auth /从我的服务器获取user_id和auth令牌.这个数据以有角度的承诺返回.

接下来,我使用此数据调用getstream api来获取user_feed对象.如果我返回此对象(user_feed),则在控制器中未定义.如果我在服务中将其打印到控制台,则它具有正确的值.我注意到在返回后打印发生了半秒左右.为什么这个变量的赋值是异步发生的?

现在,如果我在console.log语句中调用getuser_feed对象上的方法,则会打印出一个Javascript promise对象.如果我return user_feed.get()它返回undefined控制器.如果我在上面的代码中在服务中调用它,并在promise then语句中返回数据对象,它将返回undefined到控制器.但是,如果我打印data对象,它具有正确的值.

为什么我不能从此服务返回任何对象?我错过了使用承诺的一些基本方面吗?

javascript promise angularjs angular-promise getstream-io

3
推荐指数
1
解决办法
596
查看次数

Angular2 - 将'activatedRoute.params'变为承诺

我正在试图将可观察的变速器ActivatedRoute转换为承诺,但没有任何运气.我已http成功将请求转换为承诺:

this.riaService.getAdvisorsForState(this.activeState)
    .then(rias => {
        this.riasForState = rias.json();
        console.log(this.riasForState);
    });
// this all works ^
Run Code Online (Sandbox Code Playgroud)

但是我无法将'activatedRoute.params'变成一个承诺:

export class InvestmentAdvisorStateComponent implements OnInit {

    constructor(private activatedRoute: ActivatedRoute, private riaService: InvestmentAdvisorService) { }

    getStateFromUrl() {
        this.activatedRoute.params
            .toPromise()
            .then(params => {
                console.log('HERE',params)
            });
    }
// this does not work for me ^
Run Code Online (Sandbox Code Playgroud)

这就是我现在所拥有的:

getStateFromUrl() {
    this.activatedRoute.params
        .subscribe((param: any) => {
            this.activeState = param['state'];
        });
}
// works ^
Run Code Online (Sandbox Code Playgroud)

我希望将此作为一种承诺来实现,所以我可以.then脱离它.任何有关如何做到这一点的帮助非常感谢.

javascript promise observable angular-promise angular

3
推荐指数
1
解决办法
845
查看次数

无法获得ES6承诺值以在AngularJS视图中显示

我正在尝试使用Pinterest JavaScript SDK来获取项目的一些引脚数据.我在我创建的Pinterest服务中有一个方法可以在我的HomeController中调用.我尝试在响应中抛出响应,所以我可以将它放在我的HomeController上$scope并在我的视图中显示它.但是,在我看来,$ scope.pins是未定义的.为什么undefined?似乎承诺正在发挥作用.还在学习承诺.

Pinterest服务

function getBoardPins (id) {
  return new Promise(function (resolve, reject) {
    PDK.request('/v1/boards/' + id + '/pins/', 'GET', {fields: 'id,link,url,creator,board,created_at,note,color,counts,media,attribution,image,metadata'}, function (response) {
      if (response) {
        resolve(response);
      }

      reject();
    });
  });
}
Run Code Online (Sandbox Code Playgroud)

家庭控制器

Pinterest.getBoardPins('490329546869188172').then(function (response) {
  $scope.pins = response.data;
});
Run Code Online (Sandbox Code Playgroud)

视图

<h1>Pinterest</h1>
<div ng-repeat="pin in pins">
  <div>{{pin}}</div>
</div>
Run Code Online (Sandbox Code Playgroud)

html javascript angularjs angular-promise

3
推荐指数
1
解决办法
274
查看次数

TypeError:无法读取未定义的角度2的属性"http"

在我的Angular 2应用程序中成功实现gapi客户端后,我现在遇到一个问题,我的http对象未定义,我不知道为什么.

下面是代码:constructor(private http:Http){}

initGmailApi() {

gapi.auth2.getAuthInstance().grantOfflineAccess().then(function(resp) {
    console.log(resp);
    const auth_code = resp.code;

    const body = {'AuthCode': auth_code};
    const headers = new Headers();
    headers.append('Content-Type', 'application/json');
    this.http.post('http://localhost:8080/startgmail', body,  headers).subscribe(
    (Response) => {
        console.log(Response);
    }
    );
});
}
Run Code Online (Sandbox Code Playgroud)

基本上我正在做的是请求用户允许访问他的Gmail帐户,当我有响应时,我想将收到的一些数据传递给我的后端服务器.

如果我在"then"子句之外使用this.http,那么http方法可以正常工作,但这会产生另一个无法识别"auth_code"值的问题.

我在这里错过了什么?

typescript angular-promise angular

3
推荐指数
1
解决办法
3820
查看次数

Angular等待布尔函数完成

我试图从我的firestore数据库中获取用户列表,并确定登录用户是否是管理员(即他在列表中).

这是我的代码:

isAdmin(user: any): boolean {
    var col = this.afs.collection('admins');
    var docRef = col.doc('mini-admins');
    docRef.ref.get().then(function (doc) {
      if (doc.data().user == user)
        return true;
    }).catch(function (error) {
      console.log("Error getting document:", error);
    });
    return false;
}
Run Code Online (Sandbox Code Playgroud)

但是,即使用户是管理员,该功能也不起作用.在继续之前,它似乎没有等待它完成.

我该如何解决?

asynchronous angular-promise angular

3
推荐指数
2
解决办法
1万
查看次数