initial commmit
This commit is contained in:
commit
2a21c4136e
|
@ -0,0 +1,29 @@
|
||||||
|
//
|
||||||
|
// async and await
|
||||||
|
//
|
||||||
|
|
||||||
|
function resolveAfter2Seconds(x) {
|
||||||
|
return new Promise(resolve => {
|
||||||
|
setTimeout(() => {
|
||||||
|
resolve(x)
|
||||||
|
}, 2000)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// with async and await
|
||||||
|
async function add (x) {
|
||||||
|
let a = resolveAfter2Seconds(20)
|
||||||
|
let b = resolveAfter2Seconds(30)
|
||||||
|
return x + await a + await b
|
||||||
|
}
|
||||||
|
|
||||||
|
// with Promise.all
|
||||||
|
function addP (x) {
|
||||||
|
return Promise.all([
|
||||||
|
resolveAfter2Seconds(20),
|
||||||
|
resolveAfter2Seconds(30)
|
||||||
|
]).then(([a, b]) => x + a + b)
|
||||||
|
}
|
||||||
|
|
||||||
|
add(10).then(console.log)
|
||||||
|
addP(10).then(console.log)
|
|
@ -0,0 +1,17 @@
|
||||||
|
//
|
||||||
|
// Example using EventEmitter
|
||||||
|
//
|
||||||
|
const EventEmitter = require('events')
|
||||||
|
const door = new EventEmitter()
|
||||||
|
|
||||||
|
door.on('open', (arg) => {
|
||||||
|
console.log('Door was opened ' + arg)
|
||||||
|
})
|
||||||
|
|
||||||
|
process.nextTick(() => {
|
||||||
|
console.log('next tick')
|
||||||
|
door.emit('open', 'async')
|
||||||
|
})
|
||||||
|
|
||||||
|
door.emit('open', 'sync')
|
||||||
|
|
|
@ -0,0 +1,23 @@
|
||||||
|
//
|
||||||
|
// timeout vs immediate
|
||||||
|
//
|
||||||
|
const fs = require('fs')
|
||||||
|
|
||||||
|
setTimeout(() => {
|
||||||
|
console.log('timeout')
|
||||||
|
}, 0)
|
||||||
|
|
||||||
|
setImmediate(() => {
|
||||||
|
console.log('immediate')
|
||||||
|
})
|
||||||
|
|
||||||
|
fs.readFile("immediate2.js", () => {
|
||||||
|
setTimeout(() => {
|
||||||
|
console.log('timeout from readFile callback')
|
||||||
|
}, 0)
|
||||||
|
setImmediate(() => {
|
||||||
|
console.log('immediate from readFile callback')
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
console.log('script started')
|
|
@ -0,0 +1,30 @@
|
||||||
|
<!doctype html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<title>Event Demo</title>
|
||||||
|
<script>
|
||||||
|
|
||||||
|
window.onload = () => {
|
||||||
|
|
||||||
|
var bibimg = document.querySelector('img')
|
||||||
|
bibimg.src = "https://www.zhaw.ch/storage/_processed_/b/2/"
|
||||||
|
+ "csm_hsb-winterthur-aussenansicht-vorne_3198f01cca.jpg"
|
||||||
|
|
||||||
|
bibimg.addEventListener('load', function() {
|
||||||
|
alert("Image loaded")
|
||||||
|
})
|
||||||
|
|
||||||
|
var timestamp = Date.now() + 3000
|
||||||
|
while (Date.now() < timestamp) {}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
</script>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div>
|
||||||
|
<img src="" alt="Hochschulbibliothek in Winterthur">
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
|
@ -0,0 +1,16 @@
|
||||||
|
//
|
||||||
|
// Naive asynchronous code. This doesn’t work!
|
||||||
|
//
|
||||||
|
let fs = require('fs')
|
||||||
|
let timestamp = new Date().toString()
|
||||||
|
let contents
|
||||||
|
|
||||||
|
fs.writeFile('date.txt', timestamp, () => {})
|
||||||
|
|
||||||
|
fs.readFile('date.txt', (err, data) => {
|
||||||
|
if (err) throw err
|
||||||
|
contents = data
|
||||||
|
})
|
||||||
|
|
||||||
|
console.log('Comparing the contents')
|
||||||
|
console.assert(timestamp == contents)
|
|
@ -0,0 +1,22 @@
|
||||||
|
//
|
||||||
|
// nexttick vs. immediate and timeout events
|
||||||
|
//
|
||||||
|
|
||||||
|
const fs = require('fs')
|
||||||
|
const process = require('process')
|
||||||
|
|
||||||
|
fs.readFile("nexttick.js", () => {
|
||||||
|
|
||||||
|
setTimeout(() => {
|
||||||
|
console.log('timeout')
|
||||||
|
}, 0)
|
||||||
|
|
||||||
|
setImmediate(() => {
|
||||||
|
console.log('immediate')
|
||||||
|
})
|
||||||
|
|
||||||
|
process.nextTick(() => {
|
||||||
|
console.log('nexttick')
|
||||||
|
})
|
||||||
|
|
||||||
|
})
|
|
@ -0,0 +1,20 @@
|
||||||
|
//
|
||||||
|
// Rejecting a promise by throwing an error in the constructor
|
||||||
|
// callback or in the handler chain
|
||||||
|
//
|
||||||
|
|
||||||
|
var promise = new Promise((resolve, reject) => {
|
||||||
|
// reject()
|
||||||
|
// throw Error('fail')
|
||||||
|
resolve()
|
||||||
|
})
|
||||||
|
|
||||||
|
promise
|
||||||
|
.then(() => console.log('step1'))
|
||||||
|
// .then(() => { throw Error('fail') })
|
||||||
|
.then(() => console.log('step2'))
|
||||||
|
.catch (() => console.log('catch1'))
|
||||||
|
.then(() => console.log('step3'))
|
||||||
|
.catch (() => console.log('catch2'))
|
||||||
|
.then(() => console.log('step4'))
|
||||||
|
|
|
@ -0,0 +1,26 @@
|
||||||
|
//
|
||||||
|
// Passing values in a sequence of steps
|
||||||
|
//
|
||||||
|
|
||||||
|
function step1() {
|
||||||
|
return Promise.resolve('ta-da!')
|
||||||
|
}
|
||||||
|
|
||||||
|
step1().then(
|
||||||
|
function step2(result) {
|
||||||
|
console.log('Step 2 received ' + result)
|
||||||
|
return 'Greetings from step 2'
|
||||||
|
})
|
||||||
|
.then(
|
||||||
|
function step3(result) {
|
||||||
|
console.log('Step 3 received ' + result)
|
||||||
|
})
|
||||||
|
.then(
|
||||||
|
function step4(result) {
|
||||||
|
console.log('Step 4 received ' + result)
|
||||||
|
return Promise.resolve('Use my fulfilled value')
|
||||||
|
})
|
||||||
|
.then(
|
||||||
|
function step5(result) {
|
||||||
|
console.log('Step 5 received ' + result)
|
||||||
|
})
|
|
@ -0,0 +1,60 @@
|
||||||
|
//
|
||||||
|
// 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)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,28 @@
|
||||||
|
//
|
||||||
|
// Priorities in the event loop
|
||||||
|
//
|
||||||
|
|
||||||
|
Promise.resolve().then(() => console.log('promise resolved'))
|
||||||
|
setImmediate(() => console.log('set immediate'))
|
||||||
|
process.nextTick(() => console.log('next tick'))
|
||||||
|
setTimeout(() => console.log('set timeout'), 0)
|
||||||
|
|
||||||
|
Promise.resolve().then(() => console.log('promise1 resolved'))
|
||||||
|
Promise.resolve().then(() => console.log('promise2 resolved'))
|
||||||
|
Promise.resolve().then(() => {
|
||||||
|
console.log('promise3 resolved')
|
||||||
|
process.nextTick(() => console.log('next tick inside promise resolve handler'))
|
||||||
|
})
|
||||||
|
Promise.resolve().then(() => console.log('promise4 resolved'))
|
||||||
|
Promise.resolve().then(() => console.log('promise5 resolved'))
|
||||||
|
|
||||||
|
setImmediate(() => console.log('set immediate1'))
|
||||||
|
setImmediate(() => console.log('set immediate2'))
|
||||||
|
|
||||||
|
process.nextTick(() => console.log('next tick1'))
|
||||||
|
process.nextTick(() => console.log('next tick2'))
|
||||||
|
process.nextTick(() => console.log('next tick3'))
|
||||||
|
|
||||||
|
setTimeout(() => console.log('set timeout'), 0)
|
||||||
|
setImmediate(() => console.log('set immediate3'))
|
||||||
|
setImmediate(() => console.log('set immediate4'))
|
|
@ -0,0 +1,22 @@
|
||||||
|
//
|
||||||
|
// The Promise.all() function accepts an array of promise
|
||||||
|
// instances and returns a new promise which is fulfilled
|
||||||
|
// once all the promises in the array are fulfilled or
|
||||||
|
// rejected as soon as any of the promises in the array
|
||||||
|
// are rejected.
|
||||||
|
//
|
||||||
|
// The Promise.race() function accepts an array of promise
|
||||||
|
// instances and is fulfilled or rejected as soon as one of
|
||||||
|
// the promises in the array is fulfilled or rejected.
|
||||||
|
//
|
||||||
|
|
||||||
|
var p1 = new Promise((resolve, reject) => {
|
||||||
|
setTimeout(resolve, 2000, 'first')
|
||||||
|
})
|
||||||
|
|
||||||
|
var p2 = new Promise((resolve, reject) => {
|
||||||
|
setTimeout(resolve, 3000, 'second')
|
||||||
|
})
|
||||||
|
|
||||||
|
Promise.all([p1, p2]).then(console.log)
|
||||||
|
Promise.race([p1, p2]).then(console.log)
|
|
@ -0,0 +1,11 @@
|
||||||
|
//
|
||||||
|
// wait returns a promise that is resolved after some time
|
||||||
|
//
|
||||||
|
|
||||||
|
function wait (ms) {
|
||||||
|
return new Promise(resolve => setTimeout(resolve, ms))
|
||||||
|
}
|
||||||
|
|
||||||
|
wait(2000).then(() => console.log("first"))
|
||||||
|
wait(2000).then(() => console.log("second"))
|
||||||
|
|
|
@ -0,0 +1,11 @@
|
||||||
|
Quelle für diese Datei:
|
||||||
|
https://ourworldindata.org/world-population-growth#population-growth-by-country
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
HINWEIS:
|
||||||
|
|
||||||
|
Die Originalversion der CSV-Datei hat in der ersten Zeile einen String, welcher
|
||||||
|
selbst Kommas enthält. Das macht das Lasen unnötig kompliziert, daher ist die
|
||||||
|
Originalversion nun unter population_orig.csv abgelegt und eine vereinfachte
|
||||||
|
Version ist unter population.csv zu finden.
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
Binary file not shown.
Loading…
Reference in New Issue