如何将数组中的所有 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.
下面我有向两个 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.