WBE_Praktikum_5/code/async/promise-demo.js

61 lines
1.5 KiB
JavaScript
Raw Permalink Normal View History

2022-10-27 08:21:03 +02:00
//
// One promise with multiple consumers
//
// The getProfile method creates a promise that is resolved with
// a mock profile. The user is then passed to navbar.showUsername()
// and account.showProfile().
//
// Remember that a promise serves as a placeholder for the result
// of an operation. Here, the user.profilePromise is a placeholder
// used by the showUsername and show Profile functions.
// These functions can be safely called at anytime before or after
// the profile data is available. The callbacks they use to print
// the data to the console will only be invoked once the profile
// is loaded.
//
var user = {
profilePromise: null,
getProfile: function () {
if (!this.profilePromise) {
// This code would request the profile from the server
var mockProfile = {
name: 'Samantha',
subscribedToSpam: false
}
this.profilePromise = new Promise(function (resolve, reject) {
setTimeout(()=>resolve(mockProfile), 1000)
})
}
return this.profilePromise
}
}
var navbar = {
showUsername: function (user) {
user.getProfile().then(function (profile) {
console.log('*** Navbar ***')
console.log('Name: ' + profile.name)
})
}
}
var account = {
showProfile: function (user) {
user.getProfile().then(function (profile) {
console.log('*** User Profile ***')
console.log('Name: ' + profile.name)
console.log('Send lots of email? ' + profile.subscribedToSpam)
})
}
}
navbar.showUsername(user)
account.showProfile(user)