Skip to content

Instantly share code, notes, and snippets.

@shairontoledo
Created September 7, 2017 19:54
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save shairontoledo/0be90a2798039181e0c5f30ed109e3d7 to your computer and use it in GitHub Desktop.
Save shairontoledo/0be90a2798039181e0c5f30ed109e3d7 to your computer and use it in GitHub Desktop.
const getToken = (id) => {
return new Promise((resolve) => {
setTimeout(() => {
console.log(`Resolved token for ${id}`)
resolve(`Token of id: ${id}`)
}, (Math.floor(Math.random() * 3000)))
})
}
const getTokens = (ids) => {
return Rx.Observable.create((observer) => {
ids.forEach((id) => {
setTimeout(() => observer.next(`Token of id: ${id}`), 1000)
})
setTimeout(() => {
console.log("Got tokens")
observer.complete()
}, 7000)
})
}
const users = Rx.Observable.create((observer) => {
observer.next({ name: 'user1', id: 1 })
setTimeout(() => observer.next({ name: 'user2', id: 2 }), 1000)
setTimeout(() => observer.next({ name: 'user3', id: 3 }), 2000)
setTimeout(() => observer.complete(), 4000)
})
users
.map((user) => {
console.log('Got user: ' + JSON.stringify(user))
return user.id
})
.mergeMap(id => getToken(id))
.toArray()
.subscribe(tokens => console.log('All tokens here: ' + JSON.stringify(tokens)))
// Expected output
// [ 'Token of id: 1', 'Token of id: 2', 'Token of id: 3' ]
@shairontoledo
Copy link
Author

Simulation:

  1. Collect async user ids
  2. Grab user's token by id, a call per id
  3. Wait until all promises be resolved then collect their values(tokens)
  4. Make a list of all tokens them
  5. Print them out

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment