Source https://www.youtube.com/watch?v=DHvZLI7Db8E
// Without using promises:
Need to pass annoymus function callbacks:
function watchTutorialCallback(callback, errorCallback) {
let userLeft = true
let userWatchingCatMeme = false
if (userLeft) {
errorCallback({
name: 'User Left',
message: ':('
})
} else if (userWatchingCatMeme) {
errorCallback({
name: 'User Watching Cat Meme',
message: 'WebDevSimplified < Cat'
})
} else {
callback('Thumbs up and Subscribe')
}
}
watchTutorialCallback(message => {
console.log(message)
}, error => {
console.log(error.name + ' ' + error.message)
})
// Using promises:
function watchTutorialPromise() {
let userLeft = false
let userWatchingCatMeme = false
return new Promise((resolve, reject) => {
if (userLeft) {
reject({
name: 'User Left',
message: ':('
})
} else if (userWatchingCatMeme) {
reject({
name: 'User Watching Cat Meme',
message: 'WebDevSimplified < Cat'
})
} else {
resolve('Thumbs up and Subscribe')
}
})
}
watchTutorialPromise().then(message => {
console.log(message)
}).catch(error => {
console.log(error.name + ' ' + error.message)
})
.then is called for resolve, messge is the data passed back from resolve,
.catch is called for reject, error is the data object passed back
// Benefits of using promises/
const recordVideoOne = new Promise((resolve, reject) => {
resolve('Video 1 Recorded')
})
const recordVideoTwo = new Promise((resolve, reject) => {
resolve('Video 2 Recorded')
})
const recordVideoThree = new Promise((resolve, reject) => {
resolve('Video 3 Recorded')
})
Promise.all([
recordVideoOne,
recordVideoTwo,
recordVideoThree
]).then(messages => {
console.log(messages)
})
// Execute all three request at same time, and wait for every request has been resolved
very difficult to achieve through call backs.
// Return as long as one request has a response:
Promise.race([
recordVideoOne,
recordVideoTwo,
recordVideoThree
]).then(message => {
console.log(message)
})
No comments:
Post a Comment