Jesús Leganés-Combarro 'piranna'
piranna@gmail.com
Agosto 2018
Asincrono y no bloqueante (recomendado)
const {mkdir, writeFile} = require('fs')
mkdir('path', function(error)
{
if(error && error.code !== 'EEXIST') return console.trace(error)
writeFile('path/file.txt', 'asdf', function(error)
{
if(error) return console.trace(error)
console.log('Profit!')
})
})
const {promises: {mkdir, writeFile}} = require('fs')
mkdir('path')
.catch(function({code})
{
if(code !== 'EEXIST') throw error
})
.then(function()
{
return writeFile('path/file.txt', 'asdf')
})
.then(function()
{
console.log('Profit!')
},
console.trace)
const thenable =
{
then(onFullfilled)
{
onFullfilled('asdf')
}
}
thenable.then(function(value)
{
console.log(value) // asdf
})
const promise = new Promise(function(resolve, reject)
{
resolve('asdf')
})
promise.then(function(value)
{
console.log(value) // asdf
})
const promise = Promise.resolve('asdf')
promise.then(function(value)
{
console.log(value) // asdf
})
const promise = new Promise(function(resolve)
{
setTimeout(resolve, 1000, 'asdf')
})
promise.then(function(value)
{
console.log(value) // asdf, 1 second later
})
const button = new CoolButton()
const promise = new Promise(function(resolve)
{
button.once('click', resolve)
})
promise.then(function(value)
{
console.log('button clicked')
})
const {mkdir, writeFile} = require('fs')
const {promisify} = require('util')
promisify(mkdir)('path')
.catch(function({code})
{
if(code !== 'EEXIST') throw error
})
.then(function()
{
return promisify(writeFile)('path/file.txt', 'asdf')
})
.then(function()
{
console.log('Profit!')
},
console.trace)
Promise.resolve(1)
.then(function(value)
{
console.log(value) // 1
return 'asdf'
}
.then(function(value)
{
console.log(value) // asdf
// no devolvemos nada, la nueva promesa se resolvera con valor `undefined`
}
then() genera una nueva promesa
const promise1 = Promise.resolve(1)
const promise2 = promise1.then(function(value)
{
console.log(value) // 1
return 'asdf'
}
.then(function(value)
{
console.log(value) // asdf
}
promise1.then(function(value)
{
console.log(value) // 1 again, since `promise1` now has two binded callbacks
})
const {promises: {mkdir, writeFile}} = require('fs')
mkdir('path')
.catch(function({code})
{
if(code !== 'EEXIST') throw error
})
.then(function()
{
return writeFile('path/file.txt', 'asdf')
})
.then(function()
{
console.log('Profit!')
},
console.trace)
Promise.all([
Promise.resolve(1),
2,
fetch('http://www.google.es')
.then(res => res.text())
])
.then(function([value1, value2, value3])
{
console.log(value1) // 1
console.log(value2) // 2
console.log(value3) // <html>... </html>
})
Promise.race([
fetch('http://www.google.es')
.then(res => res.text()),
new Promise(function(resolve, reject)
{
setTimeout(reject, 5000, 'timeout')
})
])
.then(function(html)
{
console.log(html) // <html>... </html>
},
function(error)
{
if(error !== 'timeout') throw error
console.log('Request timed out')
})
function print23()
{
return new Promise(function(resolve)
{
setTimeout(function()
{
console.log(2)
resolve(3)
}, 1000)
})
}
function func()
{
console.log(1)
console.log(print23())
console.log(4)
return 5
}
console.log(func()) // 1, [object Promise], 4, 5, 2
async function func()
{
console.log(1)
console.log(await print23())
console.log(4)
return 5
}
func().then(console.log) // 1, 2, 3, 4, 5
function func()
{
console.log(1)
return print23()
.then(function(three)
{
console.log(three)
console.log(4)
return 5
})
}
func().then(console.log) // 1, 2, 3, 4, 5