【发布时间】:2016-02-22 06:42:36
【问题描述】:
我是响应式编程的新手,我在玩cycle.js,试图实现this tutorial 中的谁关注框。但我明白,为了正确实施(和学习目的),我没有一条数据:完整的用户名。我可以通过顺序获取用户然后从服务器获取完整用户数据来获取它。在命令式风格中,我会做这样的事情:
fetch(`https://api.github.com/users`)
.then(data => data.json())
.then(users => fetch(users[0].url))
.then(data => data.json())
.then(/* ... work with data ... */)
但是我如何在循环中做到这一点? 我正在使用 fetch 驱动程序并尝试这样的事情:
function main({ DOM, HTTP }) {
const users = `https://api.github.com/users`;
const refresh$ = DOM.select(`.refresh`).events(`click`)
const response$ = getJSON({ key: `users` }, HTTP)
const userUrl$ = response$
.map(users => ({
url: R.prop(`url`, R.head(users)),
key: `user`,
}))
.startWith(null)
const request$ = refresh$
.startWith(`initial`)
.map(_ => ({
url: `${users}?since=${random(500)}`,
key: `users`,
}))
.merge(userUrl$)
const dom$ = ...
return {
DOM: dom$,
HTTP: request$,
};
}
getJSON 在哪里
function getJSON(by, requests$) {
const type = capitalize(firstKey(by));
return requests$
[`by${type}`](firstVal(by))
.mergeAll()
.flatMap(res => res.json());
而且我总是遇到一些神秘的(对我而言)错误,例如:TypeError: Already read。这是什么意思,如何正确处理?
【问题讨论】:
标签: javascript reactive-programming rxjs cyclejs