Javascript TypeError:promise.then不是函数

Javascript TypeError:promise.then不是函数,javascript,node.js,rxjs5,Javascript,Node.js,Rxjs5,使用Rxjs v5,尝试按顺序运行http.get请求,但获取错误TypeError:promise.then不是函数 js代码: 节点http.get方法不返回承诺,请参阅 它实际上使用了一个相当非标准的接口(至少我以前没有见过),所以要让它正常工作,你需要一个小的定制工作来代替(注意:这是一个相对简单的实现): 然后您可以使用它来代替http.get Rx.Observable .from(data) .pairwise() .concatMap(a =>

使用Rxjs v5,尝试按顺序运行http.get请求,但获取错误
TypeError:promise.then不是函数
js代码:


节点
http.get
方法不返回承诺,请参阅

它实际上使用了一个相当非标准的接口(至少我以前没有见过),所以要让它正常工作,你需要一个小的定制工作来代替(注意:这是一个相对简单的实现):

然后您可以使用它来代替http.get

    Rx.Observable
    .from(data)
    .pairwise()
    .concatMap(a => {
        var url = //...url;
        return observableGet(url);        
    })    
    .subscribe(item => {
        console.log(item);
    });

或者,您可以使用返回承诺的库,这可能会使您的生活更轻松,即不返回承诺。它返回一个事件处理程序。还有其他方法吗?你不需要fromPromise的包装器直接返回http.get(url)。返回http.get(url)直接抛出另一个错误TypeError:unknown type returnedNvm,我没有意识到节点
http.get
方法遵循一些奇怪的语义,见下面我的答案。
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;
  });
}
    Rx.Observable
    .from(data)
    .pairwise()
    .concatMap(a => {
        var url = //...url;
        return observableGet(url);        
    })    
    .subscribe(item => {
        console.log(item);
    });