【问题标题】:how to use forkjoin from rxjs in NodeJs for multiple call using NPM request如何在 NodeJs 中使用来自 rxjs 的 forkjoin 进行多次调用,使用 NPM 请求
【发布时间】:2018-10-12 08:45:06
【问题描述】:

我必须在 NodeJs 中使用 request moduleRxJs Observable

在服务器端进行多次序列化调用

我有一系列 URL 地址,例如 ['www.google.com','facebook.com'] 当我发出呼叫请求时,服务器会在事件循环中忙碌。我想知道我最后一次 url 调用何时得到响应,以便我可以将响应发送到前端 到目前为止,这是我的代码

 const foo = Observable.create(function (observer) {
         res.writeHeader(200, { "Content-Type": "text/html" });
         var str = '<html><head></head><body><h1> Following are the responses: </h1><ul>'
         res.write(str);
         let count = 0;
         addressesArray.forEach(function (element, i) {

         observer.next(element);
         if (some Condition) {
            console.log('here i want to call complete when I get last response')     
       // observer.complete();   
         }


         })
     }) 

这是我的订阅功能

     const subscription = foo.subscribe({
         next : addres =>
         {
             request(addres , function (error, response, body) {
                if (!error && response.statusCode == 200) {

                     console.log(response)


                 }
                if (typeof response === "undefined" || typeof body === "undefined") {
                     console.log('No resp')
                 }
            })

     },
     complete:()=>{console.log('done')}


 })

我如何使用Forkjoin 来做这个

【问题讨论】:

    标签: node.js asynchronous rxjs observable


    【解决方案1】:

    您可以将每个 URL 转换为 Observable,然后使用 forkJoin 等待它们全部解析:

    import * as request from 'request';
    import { bindNodeCallback, forkJoin } from 'rxjs';
    
    const requestAsObservable = bindNodeCallback(request.get);
    const observables = addressesArray.map(url => requestAsObservable(url));
    
    forkJoin(...observables)
      .subscribe(console.log);
    

    您也可以使用 request-promise 包,它只返回 Promises,而不必使用 bindNodeCallback 来包装 request

    【讨论】:

    • 对于每个可观察到的@martin,我期望订阅中的响应是这样的function (error, response, body) {
    • 如果您使用forkJoin,您将获得所有响应的数组。
    • .subscribe 函数@martin 中有多少参数我只有一个对象类型
    • 我知道了,但是如果用户填写 http://www.facebook 就会出现异常,但就我而言,我有这个功能
    • 感谢 Martin 的大力帮助和时间 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-17
    • 1970-01-01
    • 1970-01-01
    • 2019-02-28
    • 1970-01-01
    • 2016-10-11
    • 1970-01-01
    相关资源
    最近更新 更多