如何将所有onNext值放在一起?

时间:2016-03-11 03:46:51

标签: javascript rxjs

下面我有代码向两个API端点发出请求。我正在寻找一种让onNext()函数只触发一次的方法。现在,如果您运行以下代码,则可以看到logs fire 1,然后fire 2。我只希望它发射一次,两个内容都在一个数组中。

import axios from 'axios'
import Rx from 'rx'
import assert from 'assert'

describe('rx axios', () => {
  it('should make http request to api', (done) => {
    let array = ['http://jsonplaceholder.typicode.com/users/1', 'http://jsonplaceholder.typicode.com/users/2']

    function httpGet(url) {
      return axios.get(url)
    }

    let source = Rx.Observable
    .fromArray(array)
    .concatMap(httpGet)

    let count = 0

    let subscription = source.subscribe(
      function (responses) {
        console.log(`fire ${count}`)
        count++
        // assert.equal(responses[0].data.name, 'Leanne Graham')
        // assert.equal(responses[1].data.name, 'Ervin Howell')
      },
      function (err) {
        done(err)
      },
      function () {
        done()
    })

  })
})

1 个答案:

答案 0 :(得分:1)

您应该可以使用toArray。例如:

 let source = Rx.Observable
    .fromArray(array)
    .concatMap(httpGet)
    .toArray()

我相信toArray也进入了RxJs v5,但是如果您使用的是该版本,请不要接受我的话并检查它。我正在使用v4。