感謝。私の問題はrxjs NPMモジュールの代わりにrxを使用することと関係していました。 rxをアンインストールしてrxjsをインストールすると、すべてのサンプルが並行処理を期待通りに使い始めました。したがって、Promises、Callbacks、およびNative ObservableとのHTTP同時呼び出しは正常に機能しました。
誰もが同様の問題に遭遇し、トラブルシューティングを行うことができるように、ここに投稿しています。
HTTPリクエストのコールバックベースのサンプル:
var Rx = require('rxjs'),
request = require('request'),
request_rx = Rx.Observable.bindCallback(request.get);
var array = [
'https://httpbin.org/ip',
'https://httpbin.org/user-agent',
'https://httpbin.org/delay/3',
'https://httpbin.org/delay/3',
'https://httpbin.org/delay/3'
];
var source = Rx.Observable.from(array).mergeMap(httpGet, 1);
function httpGet(url) {
return request_rx(url);
}
var subscription = source.subscribe(
function (x, body) {
console.log('=====', x[1].body, '======');
},
function (err) {
console.log('Error: ' + err);
},
function() {
console.log('Completed');
});
約束ベースのサンプル:
var Rx = require('rxjs'),
rp = require('request-promise');
var array = ['https://httpbin.org/ip', 'https://httpbin.org/user-agent',
'https://httpbin.org/delay/3',
'https://httpbin.org/delay/3',
'https://httpbin.org/delay/3'
];
var source = Rx.Observable.from(array).mergeMap(httpGet, 1);
function httpGet(url) {
return rp.get(url);
}
var results = [];
var subscription = source.subscribe(
function (x) {
console.log('=====', x, '======');
},
function (err) {
console.log('Error: ' + err);
},
function() {
console.log('Completed');
});
ネイティブRxJSサンプル:
var Rx = require('rxjs'),
superagent = require('superagent'),
Observable = require('rxjs').Observable;
var array = [
'https://httpbin.org/ip',
'https://httpbin.org/user-agent',
'https://httpbin.org/delay/10',
'https://httpbin.org/delay/2',
'https://httpbin.org/delay/2',
'https://httpbin.org/delay/1',
];
let start = (new Date()).getTime();
var source = Rx.Observable.from(array)
.mergeMap(httpGet, null, 1)
.timestamp()
.map(stamp => [stamp.timestamp - start, stamp.value]);
function httpGet(apiUrl) {
return Observable.create((observer) => {
superagent
.get(apiUrl)
.end((err, res) => {
if (err) {
return observer.onError(err);
}
let data,
inspiration;
data = JSON.parse(res.text);
inspiration = data;
observer.next(inspiration);
observer.complete();
});
});
}
var subscription = source.subscribe(
function (x) {
console.log('=====', x, '======');
});
http://stackoverflow.com/documentation/rxjs/8247/common-recipes/27973/sending-multiple-parallel-http-requests#t=201703261009146257815 – martin