Le nœud http.get
ne renvoie pas de promesse, voir aquí
Il utilise en fait une interface plutôt non standard (du moins, je ne l'ai pas vraiment vu auparavant), donc pour que cela fonctionne, vous avez besoin d'une petite solution de contournement personnalisée ( note : il s'agit d'une mise en œuvre relativement naïve) :
var http = require('http');
function observableGet(options) {
return new Rx.Observable(subscriber => {
var subscription = new Rx.Subscription();
//Create the request
var request = http.get(options, (res) => {
//Create a stream for the "end" event
var done = Rx.Observable.fromEvent(res, 'end');
//Create a stream for data events
var s1 = Rx.Observable.fromEvent(res, 'data')
//Take data events until all have been read
.takeUntil(done)
//Gather all the data events into a single object
.reduce((body, delta) => body + delta, '')
//Optional: Parse the resulting data object
.map(x => JSON.parse(x))
//Start the stream
.subscribe(subscriber);
//Register this stream for disposal
subscription.add(s1);
});
//Grab errors from the request and forward them to the error handler
//of subscriber
var s2 = Rx.Observable.fromEvent(request, 'error', (e) => { throw e; })
.subscribe(subscriber);
//Register for disposal
subscription.add(s2);
//Return the parent subscription
return subscription;
});
}
Vous pouvez alors l'utiliser à la place de http.get
Rx.Observable
.from(data)
.pairwise()
.concatMap(a => {
var url = //...url;
return observableGet(url);
})
.subscribe(item => {
console.log(item);
});
Vous pouvez également utiliser une bibliothèque qui renvoie Promises
à la place, ce qui pourrait vous faciliter la vie, c'est-à-dire demande-promesse