下面我有代码向两个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()
})
})
})
答案 0 :(得分:1)
您应该可以使用toArray
。例如:
let source = Rx.Observable
.fromArray(array)
.concatMap(httpGet)
.toArray()
我相信toArray
也进入了RxJs v5,但是如果您使用的是该版本,请不要接受我的话并检查它。我正在使用v4。