Rx.js和应用程序工作流
Rx.js and application workflow
我有一个web应用程序,我使用Rx.js处理事件流。该应用程序使用后端提供的rest api
。
大多数情况下,我订阅api
调用,当请求完成时,我渲染结果并重置其他控件状态(隐藏进度元素等)。
一些api
调用可以失败,当一个认证令牌过期,我必须让用户再次登录(显示登录弹出框左右)。
我很好奇是否有一种方法可以在成功登录后"恢复"api调用流?用户不需要提供额外的操作来获得服务器响应。
当前工作流的原始示例:
var apiCallStream = $.ajaxAsObservable(params):
apiCallStream.subscribe(
result => renderResult(result),
err => handleError(err));
function handleError(err) {
if (err.xhr.error === 401) {
LoginPopup();
} else {
ErrorPopup(err);
}
}
这里有一些(非常粗糙的伪代码),但您可以使用retryWhen
:
// use Rx.DOM.get for an Observable Ajax GET
var source = Rx.DOM.get('/some/end/point')
.retryWhen(function(errors) {
// retryWhen: errors is a stream of errors
// whatever observable you return, when it emits, the
// observable you're operating on will be retried. (the entire thing)
return errors.filter(function(e) { return e.status === 401; })
// if status is 401, then tell the user to login
.flatMapLatest(function() { return doUserLogin; });
});
// a contrived observable that shows a form and
// return a stream of successful logins
var doUserLogin = Observable.create(function(observer) {
// show a form
var form = $('.my-form').show();
// when submit is fired on said form...
return Rx.Observable.fromEvent(form, 'submit')
// send a login over ajax
.flatMap(e => Rx.DOM.post('some/url/login', form.serialize()))
});
希望这能让你有个开始
相关文章:
- 使用谷歌应用程序脚本从工作表中获取值并将其显示在文本框中
- firefox插件:退出不工作的应用程序观察器
- 为什么Turbolinks不能正常工作?Rails应用程序
- 谷歌表单-根据分配给谷歌应用程序的工作为商业用户预先填充多项选择列表
- 我如何知道js文件之间的javascript应用程序代码流
- angular js应用程序不工作
- 应用程序在“关闭”之后停止工作(控制台中没有错误);咕哝的构造”;
- 只需添加一个'允许跨来源请求'到我的节点应用程序工作
- 我应该将哪些数据传递给 Spotify 应用程序才能使分页工作
- 如何让应用程序帮助程序方法在发送的请求为 JS 格式时工作
- 最基本的 Angular 应用程序无法正常工作
- 如何在ExtJS中构建无需鼠标即可工作的应用程序
- 谷歌地图无法在iPhone / iPad工作灯6.2应用程序上运行
- 最佳实践:重构移动应用程序(JS、jquery、PHP)的工作流
- 关闭工作灯应用程序点击基于sim卡的详细信息
- iOS视频自动播放不工作的应用程序
- jQuery text()和show()不工作(RoR应用程序)
- Rx.js和应用程序工作流
- 使用谷歌应用程序脚本的工作流-我需要在第一步向用户发送电子邮件
- 基于Web的工作流设计器,可以与ASP一起使用.网络应用程序