如何将数组中的所有 onNext 值放在一起?

How to get all onNext values in array together?

下面我有向两个 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()
    })

  })
})

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

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

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