fah*_*ash 3 javascript reactive-programming rxjs
我已经阅读了Rx CodePlex页面的介绍部分.我看过CascadiaJS的视频.我发现了如何使用RxJS库.我有一个问题是如何帮助我使用现有的Ajax应用程序,我需要在服务器端和客户端更改以充分利用RxJS.
场景 我有一个使用ASP.NET Web API编写的REST服务.该服务当前有一个方法,它采用一个坐标数组并返回另一个坐标数组.因此调用非常简单,就像这样.
$.ajax({
url: "http://www.myservice.com/service1/",
type: "POST",
data: JSON.stringify(params),
contentType: "application/json;charset=utf-8",
success: handle_success,
error: handle_failure,
OPTIONS: null,
});
Run Code Online (Sandbox Code Playgroud)
现在,上面的调用只是调用REST服务,并对结果如何产生采取适当的操作.
有了Rx,我听到了"推"而不是拉的咒语.我们如何在上面的示例中使用"Push"?我是否要将我的REST服务更改为一个Listening TCP Socket,我的网页将保持连接(或进行Keep-Alive连接),新值将被"推送".或者这只是一个如上所述的服务调用,但成功/错误只是通过Observable"引导",一旦调用完成,该Observable的工作就完成了?
即使不担心将服务器更改为推送到客户端,RxJ也可以帮助您在客户端上编写异步操作.
例如,如果您将ajax调用建模为observable:
// each time you subscribe to service, it will execute the ajax call and send back the result
var service = Rx.Observable.defer(function () {
return $.ajax({
url: "http://www.myservice.com/service1/",
type: "POST",
data: JSON.stringify(params),
contentType: "application/json;charset=utf-8"
});
});
// Now fun with Rx
// just call the service like in your OP example:
service.subscribe(handle_success, handle_failure);
// poll the service every 5 seconds
var pollInterval = Rx.Observable.empty().delay(5000);
service
.concat(pollInterval)
.repeat()
.subscribe(success, failure);
// run the service whenever user clicks Refresh
$('#refresh')
.onAsObservable('click')
.flatMap(function () { return service; })
.subscribe(success, failure);
// same as above, but ignore it when user clicks too fast (e.g. faster than 1 second)
$("#refresh")
.onAsObservable('click')
.debounce(1000)
.flatMap(function () { return service; })
.subscribe(success, failure);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1647 次 |
| 最近记录: |