我设法加载数据并保存数据。但无法理解所需的错误处理方案。
当一切正常时,我会收到相同的对象,但是有一个额外的属性_saving
(false)。
当出现问题时,例如尝试存储字符串而不是数字,我会得到:
this.save()
.then(function(result) {
console.log('ok1', result);
}).catch(function() {
console.log('errorHandler1');
});
我一直在尝试使用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');
});
同样,它仍然存储数据正确时的信息,我看到的问题是我没有工具来决定数据何时正确存储,以及避免触发可以正确处理的错误。
答案 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
你有同样的行为吗?