【问题标题】:Cycle.js Nested HTTP RequestsCycle.js 嵌套 HTTP 请求
【发布时间】:2023-03-25 00:00:01
【问题描述】:

我正在尝试使用 cycle-http 驱动程序发送多个 HTTP 请求。我的示例中的第一个请求获取了一个邮箱列表,并且在该响应中是多个邮箱,我必须为后续线程发送 HTTP 请求。

获取所有邮箱 ID HTTP 请求 -> 从每个邮箱 HTTP 请求中获取所有邮件。

在这一点上我很困惑,我看到的所有示例都是简单的单个请求,其中 url 在生成 observable 之前是已知的。因此,我不仅对嵌套 HTTP 请求感到困惑,而且由于 URL 是动态生成的,因此我也不确定在发出请求后如何“知道”filter 的 URL。

任何帮助将不胜感激。

【问题讨论】:

    标签: cyclejs


    【解决方案1】:

    我们可以假设我们已经有一个流来表示 HTTP 请求的第一“级别”的结果。我们可以简单地映射这些结果并将它们转换为新的 HTTP 请求:

    // this should be sent to HTTP driver
    let mailboxDetailsRequests$ = mailboxes$.map(mailboxes => {
      // map all mailboxes to requests sequence
      return Observable.fromArray(mailboxes.map(mailbox => ({
        url: 'get/mailbox/url/' + mailbox.name,
        mailbox: mailbox.name
      }))
    }).flatMap(_ => _)
    

    现在我们可以通过过滤请求的 mailbox 属性来访问这些 HTTP 响应(或者您可以使用某种区分这些请求与其他类型请求的区别功能):

    // and now you can get the responses by filtering the HTTP source
    let mailboxResult$ = HTTP.filter(r$$ => r$$.request.mailbox).switch();
    

    【讨论】:

    • 如果我们确定只有一个请求可以检索所有邮箱,您认为在创建mailboxDetailsRequests时使用flatMap而不是switch更好吗?
    • 是的,应该使用 flatMap。
    猜你喜欢
    • 2016-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多