我正在构建一个"安全"应用程序,并使用redux-saga和fetchjs来执行对后端的异步调用.
当用户未获得授权时,我的后端返回401状态代码,我想全局捕获此"异常"并发送操作,以便我的反应应用程序进入登录屏幕.
我发现了以下解决方案:https://github.com/redux-saga/redux-saga/issues/110,但在这种情况下,401的处理应该在我们构建的每个传奇中都是明确的.
通过向每个传奇添加代码,它变得更加复杂.它还增加了开发人员忘记添加处理401代码的代码的机会.
全球有没有一种很好的方法来处理这个401响应?
在我的ember应用程序中,我使用bootbox(http://bootboxjs.com/)确认删除某些模型.在我的qunit测试中,我单击带有{{action}}的按钮,在此操作中我打开一个bootbox.在文本中,单击引导框上的"确定"按钮.
但是,andThen方法不会等待bootbox消失.因此,检查模型是否被移除总是错误的.我试图回复一个承诺但是,然后帮助也不等待承诺.
有没有办法让测试等到解决bootbox的承诺,或者bootbox的回调完成?
额外信息:我的模板是:
<button class="btn btn-default" {{action 'askDelete' target="view"}} data-toggle="tooltip" data-placement="right" {{translateAttr title="trips.remove"}}><i class="fa fa-trash-o"></i></button>
Run Code Online (Sandbox Code Playgroud)
我的观点是:
actions: {
askDelete: function(){
var self = this;
self.$('td').slideUp('500').promise().then(function(){
self.get('controller').send('delete');
});
}
}
Run Code Online (Sandbox Code Playgroud)
我的控制器:
actions: {
save: function(){
self.get('content').save().then(function(){
self.get('controllers.history').transitionToPrevious('trips.index');
});
Run Code Online (Sandbox Code Playgroud)
我的测试:
click(".specific-row .action-buttons button");
andThen(function() {
// Check if the row is indeed removed from the table
ok(find(".content-row table tr:contains('content-of-row')").length === 0, "deleted and removed from the table");
});
Run Code Online (Sandbox Code Playgroud)
但是在触发控制器中的保存操作之前调用最新的ok,因此始终为false.
我在最小的情况下做了一个jsfiddle:http: //jsfiddle.net/21af9puz/1/
asynchronous ×1
ember.js ×1
fetch ×1
qunit ×1
react-redux ×1
reactjs ×1
redux-saga ×1
testing ×1