这是一个真正入门级的响应式编程问题。以下代码将从 github 中记录一组 users
。我怎样才能使用 Rx 访问记录每个单独的 user.login
?
import axios from 'axios'
import Rx from 'rx'
let requestStream = Rx.Observable.just('https://api.github.com/users')
let getJSON = (url) => {
return axios.get(url).then(response => response.data)
}
let responseStream = requestStream
.flatMap(function(requestUrl) {
return Rx.Observable.fromPromise(getJSON(requestUrl))
})
responseStream.subscribe(function(response) {
console.log(response)
})
我试过:
let responseStream = requestStream
.flatMap(function(requestUrl) {
return Rx.Observable.fromPromise(getJSON(requestUrl))
})
.flatMap(user => {
console.log(user)
})
和:
let users = responseStream
.flatMap(user => {
console.log(user)
})
users.subscribe(function(response) {
// console.log(response)
})
最佳答案
要从数组中获取每个用户,请创建并返回该数组的一个新的可观察对象,如下所示:
let responseStream = requestStream
.flatMap(function(requestUrl) {
return getJSON(requestUrl);
})
.flatMap(function(usersResponse) {
return rx.Observable.from(usersResponse);
})
.doOnNext(function(user) {
console.log(user);
});
当您调用 responseStream.subscribe(......)
时,它现在应该从 .doOnNext()
方法中单独注销每个用户。
我使用 Mosho 的答案作为此响应的基础,并假设第一个 flatMap 从 github 返回一个用户数组。
关于javascript - 循环/映射从 .flatMap 返回的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35322111/