连接到RESTful API时如何正确处理can-connect错误

时间:2016-09-24 13:46:50

标签: javascript rest mvvm promise canjs

我设法加载数据并保存数据。但无法理解所需的错误处理方案。 当一切正常时,我会收到相同的对象,但是有一个额外的属性_saving(false)。

当出现问题时,例如尝试存储字符串而不是数字,我会得到:

  1. 错误请求(控制台上出错,不希望如此)
  2. 响应对象(可能有助于显示错误)
  3. “Uncaught(in promise)”​​错误
  4. 实施例

    码:
    this.save()
        .then(function(result) {
        console.log('ok1', result);
    }).catch(function() {
        console.log('errorHandler1');
    });
    
    • 行:
      • https://www.dropbox.com/s/ogoc1opcmh6w23q/Screenshot%202016-09-24%2010.35.08.png?dl=1
    • 错误:
      • https://www.dropbox.com/s/hufs2b68t8bqfhl/Screenshot%202016-09-24%2010.36.02.png?dl=1

    我一直在尝试使用catch on promises,遵循以下准则:   https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/catch 但是根本没有运气。

    这应该可行,只需将p1.then更改为thisObjectThatIWantToSave.save.then,但事实并非如此。

    p1.then(function(value) {
        console.log(value); // "Success!"
        throw 'oh, no!';
    }).catch(function(e) {
        console.log(e); // "oh, no!"
    }).then(function(){
        console.log('after a catch the chain is restored');
    }, function () {
        console.log('Not fired due to the catch');
    });
    

    同样,它仍然存储数据正确时的信息,我看到的问题是我没有工具来决定数据何时正确存储,以及避免触发可以正确处理的错误。

    我正在使用

    • canjs v3.0.0-pre.11
    • 羽毛提供的宁静API

1 个答案:

答案 0 :(得分:1)

关于错误处理......

  

错误的请求(控制台上的错误,不希望这样)

无法阻止控制台上的错误。这就是chrome所做的事情。

  

响应对象(可能有助于显示错误)

您可以在 class LeaseTerm(CommonInfo): version = IntegerVersionField( ) start_period = models.ForeignKey(Period, related_name='start_period' ) end_period = models.ForeignKey(Period, related_name='end_period') lease = models.ForeignKey(Lease) increase = models.DecimalField(max_digits=7, decimal_places=2) amount = models.DecimalField(max_digits=7, decimal_places=2) is_terminated = models.BooleanField(default=False) def clean(self): model = self.__class__ if self.lease_id and (self.is_terminated == False) and model.objects.filter(lease=self.lease, is_active=True ).count() == 1: raise ValidationError('!Lease has a active condition already, Terminate prior to creation of new one'.format(self.lease)) 等can-stache中阅读reason的拒绝信息。

  

“未捕获(承诺)”错误

我不确定为什么这会被清楚地抛出,你的{{promise.reason}}被击中了。如果您将其更改为:

catch

你有同样的行为吗?