javascript-使用RxJS将多个ajax请求转换为Observable
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript-使用RxJS将多个ajax请求转换为Observable,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2164字,纯文字阅读大概需要4分钟。
内容图文
![javascript-使用RxJS将多个ajax请求转换为Observable](/upload/InfoBanner/zyjiaocheng/682/f027a75a4c90493599fba47fcf1e7ae2.jpg)
我正在为某些事情而苦苦挣扎-我猜这意味着我误解了,并且正在做一些愚蠢的事情
我有一个可观察的对象,需要使用它来创建一些对象,将其发送到服务器进行处理,将服务器的结果与我发送的对象进行合并,然后将其转换为可观察对象,因此我想做的(我认为)就像
var theNewObservable = my.observable.things.select(function(thing) {
var dataToSend = generateMyJavascriptObjectFrom(thing);
var promise = $.ajax({
type: 'POST',
url: http://somewhere.com,
data: dataToSend
}).promise();
return rx.Observable.fromPromise(promise).subscribe(function(data, status, jqXHR) {
var infoFromServer = jqXHR.getResponseHeader('custom-header-returned');
// I'm wanting this to be the thing other code can subscribe to
return { infoFromServer: dataToSend };
}, function(err) {
alert('PC LOAD LETTER!');
console.error(err);
});
}
});
theNewObservable.subscribe(function(combinedInfo) { console.log(combinedInfo) };
我期望{infoFromServer:dataToSend}在哪里,我得到了一个AutoDetachObserver,我看到它具有一个带有ajax onSuccess签名的onNext,所以我显然在做一些愚蠢的事情
解决方法:
有几件事应该有所帮助:
1)订阅方法是一种终端方法,因为它不会返回任何内容.它是观察者附加的位置,因此订阅后不应有进一步的数据传播
2)订阅的onNext方法只能采用一个值,您需要将所有消息数据都包装在其中.
由于jQuery的Promise在此方面表现不佳,因此您有两个选择.首先,可以将RX-DOM项目用于Observable ajax版本.否则,您将需要包装promise方法.如果您还需要等待响应,则应改用selectMany,它可以让您解除承诺,然后等待其返回并将响应映射到原始请求.
var theNewObservable = my.observable.things
//Preprocess this so that `selectMany` will use
//dataToSend as the request object
.map(function(thing) { return generateMyJavascriptObjectFrom(thing); })
.selectMany(function(dataToSend) {
var promise = $.ajax({
type: 'POST',
url: http://somewhere.com,
data: dataToSend
}).promise();
//Rewrap this into a promise that RxJS can handle
return promise.then(function(data, status, jqXHR) {
return {data : data, status : status, jqXHR : jqXHR};
});
}, function(request, response) {
return {
infoFromServer : response.jqXHR.getResponse('custom-header'),
dataToSend : request
};
});
theNewObservable.subscribe(
function(combinedInfo) {
console.log(combinedInfo)
},
function(err) {
alert('PC LOAD LETTER!');
console.error(err);
});
内容总结
以上是互联网集市为您收集整理的javascript-使用RxJS将多个ajax请求转换为Observable全部内容,希望文章能够帮你解决javascript-使用RxJS将多个ajax请求转换为Observable所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。