Sono nuovo alla programmazione reattiva e gironzolo con cycle.js, cercando di implementare chi seguire la casella da this tutorial. Ma ho capito che per una corretta implementazione (e scopi di apprendimento) non ho un pezzo di dati: nome utente completo. Posso ottenerlo sequenziando gli utenti e quindi i dati completi dell'utente dal server. In stile imperativo vorrei fare qualcosa del genere:Come richiedere i dati sequenzialmente in 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 ... */)
Ma come faccio a farlo in ciclo? sto usando prendere conducente e cercando qualcosa di simile:
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$,
};
}
dove getJSON
è
function getJSON(by, requests$) {
const type = capitalize(firstKey(by));
return requests$
[`by${type}`](firstVal(by))
.mergeAll()
.flatMap(res => res.json());
e sono sempre ottenere un certo errore criptico (per me) come: TypeError: Already read
. Che cosa significa e come lo gestisco correttamente?
Grazie, funziona! Ma a me sembra comunque una specie di magia. Capisco correttamente che 'userRequest $ 'aspetta semplicemente' listResponse $ 'per emettere qualcosa e poi fa solo quello che viene dopo nella catena? – kibin
corretto. Mappa un evento da 'listResponse $' a una nuova richiesta. –
Capito. Grazie ancora, mi piace molto cycle.js e continuerò a scavare dentro. – kibin