kib*_*bin 8 javascript reactive-programming rxjs cyclejs
我不熟悉反应式编程和使用cycle.js玩弄,尝试实现本教程中关注框的人.但我明白,为了正确实现(和学习目的),我没有一个数据:完整的用户名.我可以通过顺序获取用户,然后从服务器获取完整的用户数据来获得它.在命令式的风格我会做这样的事情:
fetch(`https://api.github.com/users`)
.then(data => data.json())
.then(users => fetch(users[0].url))
.then(data => data.json())
.then(/* ... work with data ... */)
Run Code Online (Sandbox Code Playgroud)
但是我该怎么做呢?我正在使用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$,
};
}
Run Code Online (Sandbox Code Playgroud)
这里getJSON是
function getJSON(by, requests$) {
const type = capitalize(firstKey(by));
return requests$
[`by${type}`](firstVal(by))
.mergeAll()
.flatMap(res => res.json());
Run Code Online (Sandbox Code Playgroud)
而且我总是得到一些神秘的(对我来说)错误,如:TypeError: Already read.它是什么意思,我该如何处理它?
你很亲密.您只需要删除startWith(null)作为请求,并抓住第二个响应(您错过了那个的getJSON).
function main({ DOM, HTTP }) {
const usersAPIPath = `https://api.github.com/users`;
const refresh$ = DOM.select(`.refresh`).events(`click`);
const userResponse$ = getJSON({ key: `user` }, HTTP);
const listResponse$ = getJSON({ key: `users` }, HTTP);
const userRequest$ = listResponse$
.map(users => ({
url: R.prop(`url`, R.head(users)),
key: `user`,
}));
const listRequest$ = refresh$
.startWith(`initial`)
.map(_ => ({
url: `${usersAPIPath}?since=${Math.round(Math.random()*500)}`,
key: `users`,
}));
const dom$ = userResponse$.map(res => h('div', JSON.stringify(res)));
return {
DOM: dom$,
HTTP: listRequest$.merge(userRequest$),
};
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1064 次 |
| 最近记录: |