2016-03-08 127 views
1

我试图使用cycle-http驱动程序发送多个HTTP请求。在我的例子中的第一个请求抓取邮箱列表,并且在该响应中有多个邮箱,我必须为后续线程发送HTTP请求。Cycle.js嵌套的HTTP请求

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

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

任何帮助将不胜感激。

回答

3

我们可以假设我们已经有一个流表示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(); 
+0

你觉得这是更好地创造mailboxDetailsRequests时使用flatMap代替开关,如果我们相信,只有一个检索所有邮箱的要求吗? – erdal

+0

是应该使用flatMap。 – WHITECOLOR