这就是我正在做的事情。从内容存储服务器读取文件内容。我正在做的就是从客户端调用https GET请求来获取文件内容。
https://contentserver.xyz.com/file_id(从客户端调用)
file_id - 表示文件的唯一值。
现在我的内容服务器不知道文件元。因此,它再次调用metaserver来获取文件的元内容,如
http://metaserver.xyz.com/file_id(内部S2S沟通)
现在可以拆分从客户端调用的请求
分为两个
即;调用请求https://contentserver.xyz.com/file_id
时,默认情况下应调用其他请求https://metaserver.xyz.com/file_id
?
我不确定这是否可行。但是很想知道天气有什么可能的方法来实现这个目标吗?
答案 0 :(得分:1)
当您在浏览器上发布来自javascript的ajax请求时,它会异步发送。您将回调传递给成功返回或拒绝请求的时间。
因此,如果您一个接一个地发布其中两个,则会立即发送它们,并且在完成后将触发每个回调。
但这假设您的内容服务器不需要文件元,只是将其返回给浏览器。
另请注意,从浏览器调用其他域可能会产生CORS个问题。
答案 1 :(得分:1)
如果文件内容请求取决于文件元信息,则无法并行发送这两个请求。首先需要获取文件元信息。
否则,RxJS可用于管理这两个异步请求,当{em> meta 和 content 请求都是forkJoin
帮助汇总结果时完成。
这是一个简单的例子:
const Rx = require('rxjs/Rx');
var meta = Rx.Observable.create(function (observer){
$.get('https://metaserver.xyz.com/file_id', function(data) {
observer.next(body);
observer.complete();
});
});
var content = Rx.Observable.create(function (observer){
$.get('https://contentserver.xyz.com/file_id', function(data) {
observer.next(body);
observer.complete();
});
});
var source = ['meta', 'content'];
Rx.Observable.forkJoin([meta, content], function(){
let responseObj = {};
for(let i=0;i<source.length;i++){
responseObj[source[i]] = arguments[i];
}
return responseObj;
}).subscribe(function(val) {
// val is the final value, containing meta and content information.
});
请注意forkJoin
表示(doc):
当所有可观测量完成时,从每个观察者发出最后一个值。