编程语言
首页 > 编程语言> > javascript – 处理失败的breezejs保存

javascript – 处理失败的breezejs保存

作者:互联网

我有一个简单的angularjs服务,它包含微风,使其可用于我的应用程序.在这项服务中,我希望有一种处理失败的机制.我试图在调用结束时将.fail()置于链接中,如果breeze调用失败(例如由于用户被注销),则调用失败.唯一的问题是链中的第一个.done()(通常驻留在调用服务的控制器中)也会被调用.我只希望在微风成功时调用它.

如何防止第一次完成被调用?

以下是一个示例保存调用(完成时调用错误)

dataStore.saveEntity(model)
    .then(function() {
    // This is being called on fail             
});

还有一小撮服务包裹着微风

angular.module('app')
.factory('dataStore' ,function() {

        var _handleFail = function(error) {
            if (error && error.status && error.status === 401) {
                // Logged out error (for example

            }
        };



        function saveEntity(entity) {   
           return manager.saveChanges(entity).fail(_handleFail);    
        }

解决方法:

事实证明.fail()进一步传播了promise.考虑以下:

promise.then(function(){
      console.log('Then 1');
      throw new Error('Error');
  })
  .then(function(){
      console.log('Then 2');
  })
  .then(function(){
      console.log('Then 3');   
  })
  .fail(function(){
      console.log('Fail 1');   
  })
  .then(function(){
      console.log('Then 4');
  });

将输出:

> Then 1
> Fail 1
> Then 4

.fail()从第一个.then()中捕获错误,然后将promise传递给第四个.then().在我的例子中,breeze查询生成一个由.fail()捕获的错误,处理完毕后,promise将被传递给调用容器中的.then().

为了解决这个问题,_handleFail()函数需要抛出一个错误来防止任何链接的.then()被调用(直到错误由.fail()处理.

所以我的服务现在看起来像:

angular.module( ‘应用程序’)
.factory(‘dataStore’,function(){

    var _handleFail = function(error) {
        if (error && error.status && error.status === 401) {
            // Logged out error (for example
            throw new Error('Unauthorized');
        }
    };



    function saveEntity(entity) {   
       return manager.saveChanges(entity).fail(_handleFail);    
    }

标签:javascript,angularjs,promise,breeze
来源: https://codeday.me/bug/20190629/1325374.html