Javascript
22/10/20 danny
Définition
ECMA
- European Computer Manufacturers Association,
Ecma International
- Organisation de standardisation
ECMAScript
- Ensemble de normes pour langages de type script.
Versions significatives
- ES5
ECMAScript Edition 5 publieé en décembre 2009
- ES6 ou ES2015
ECMAScript Edition 6 publiée en Juin 2015
- ES7
ECMAScript Edition 7 publiée en Juin 2016
Const, let, var
Let
- Portée limitée au bloc courant.
Const
- Déclare une constante disponible en lecture uniquement.
Doit être déclarée avec une valeur initiale.
La portée est celle du bloc.
Si elle est définie hors de toute fonction la portée est globale
Var
- Portée limitée à une fonction
Utilisation de Var
On retrouve plus souvent const et let que var.
Car let et const sont maintenant préférés grâce à leurs portées par bloc, plus subtile.
Les promises ou promesses
function importItem() {
return new Promise(function (resolve, reject) {
console.log('0001');
if (Math.random() > .5) {
console.log('0002');
resolve("ok");
}
else {
console.log('0003');
resolve("not ok");
}
});
}
const promise = importItem();
promise
.then(res => {
console.log('0004' + res);
})
.catch(err => {
console.log('0005' + err);
})
.finally(err => {
console.log('0006' + err);
});
Promise then catch
const promise = new Promise((resolve, reject) => {
if (Math.random() > .3) {
console.log('resolve');
resolve(true);
}
else {
if (Math.random() > .5) {
console.log('reject');
reject(false);
}
else {
console.log('catch');
throw 'catch';
}
}
});
promise
.then(res => {
console.log('then:' + res);
})
.catch((error) => {
console.error('catch:' + error);
});
Solution 1
function importItem() {
return new Promise(function (resolve, reject) {
console.log('importItem');
if (Math.random() > .5) {
console.log('importItem:true');
resolve(true);
}
else {
console.log('importItem:false');
resolve(false);
}
});
}
function createItem() {
return new Promise(function (resolve, reject) {
console.log('createItem');
if (Math.random() > .5) {
console.log('createItem:true');
resolve(true);
}
else {
console.log('createItem:false');
resolve(false);
}
});
}
function checkItem() {
return new Promise(function (resolve, reject) {
console.log('checkItem');
if (Math.random() > .5) {
console.log('checkItem:true');
resolve(true);
}
else {
console.log('checkItem:false');
resolve(false);
}
});
}
importItem()
.then(res => {
if (res) {
console.log('then:importItem' + res);
checkItem()
.then(res => {
if (!res) {
console.log('then:checkitem:not exist' + res);
createItem()
.then(res => {
console.log('then:createitem' + res);
})
.catch(err => {
console.log('catch:createitem' + err);
})
} else {
console.log('then:checkitem:exist' + res);
}
})
.catch(err => {
console.log('catch:checkitem' + err);
})
}
})
.catch(err => {
console.log('catch:importItem' + err);
});
Chainages
function importItem() {
return new Promise(function (resolve, reject) {
console.log('importItem');
if (Math.random() > .5) {
console.log('importItem:true');
resolve(true);
}
else {
console.log('importItem:false');
resolve(false);
}
});
}
function createItem() {
return new Promise(function (resolve, reject) {
console.log('createItem');
if (Math.random() > .5) {
console.log('createItem:true');
resolve(true);
}
else {
console.log('createItem:false');
resolve(false);
}
});
}
function checkItem() {
return new Promise(function (resolve, reject) {
console.log('checkItem');
if (Math.random() > .5) {
console.log('checkItem:true');
resolve(true);
}
else {
console.log('checkItem:false');
resolve(false);
}
});
}
importItem()
.then(res => {
console.log('0001:checkItem:' + res);
if (res) {
return !checkItem(res);
}
})
.then(res => {
console.log('0002:createItem:' + res);
if (res) {
return createItem(res);
}
})
.catch(err => {
console.log('0003:catch:importItem' + err);
});
Await async
function importItem() {
return new Promise(function (resolve, reject) {
console.log('importItem');
if (Math.random() > .5) {
console.log('importItem:true');
resolve(true);
}
else {
console.log('importItem:false');
resolve(false);
}
});
}
function createItem() {
return new Promise(function (resolve, reject) {
console.log('createItem');
if (Math.random() > .5) {
console.log('createItem:true');
resolve(true);
}
else {
console.log('createItem:false');
resolve(false);
}
});
}
function checkItem() {
return new Promise(function (resolve, reject) {
console.log('checkItem');
if (Math.random() > .5) {
console.log('checkItem:true');
resolve(true);
}
else {
console.log('checkItem:false');
resolve(false);
}
});
}
async function importItems() {
try {
const result = await importItem();
const newResult = await checkItem(result);
if (!newResult) {
const finalResult = await createItem(newResult);
console.log('Résultat final : ' + finalResult);
}
} catch (error) {
console.log('catch:importItem' + err);
}
}
importItems();
Error and await
async function execute() {
try {
const databaseNsame = 'mock';
console.logdddd('0000:' + databaseName);
return true;
}
catch (err) {
console.log('0001:' + err);
return false;
}
}
execute()
.then(res => {
console.log('0004:' + res);
process.exit();
})
.catch(err => {
console.log('0005:' + err);
process.exit();
});
Error and promise
function execute() {
return new Promise(function (resolve, reject) {
console.log('0001');
if (Math.random() > .5) {
console.log('0002');
resolve("ok");
}
else {
console.log('0003');
resolve("not ok");
}
});
}
execute()
.then(res => {
console.log('0004:' + res);
process.exit();
})
.catch(err => {
console.log('0005:' + err);
process.exit();
});
Promise all
function createDomain(param) {
return new Promise(function (resolve, reject) {
console.log('createDomain:' + param);
resolve('createDomain:resolve:' + param);
});
}
function execute() {
return new Promise(function (resolve, reject) {
Promise.all([
createDomain(1111),
createDomain(2222),
createDomain(3333),
createDomain(4444)
])
.then((res) => {
console.log('execute:Promise.all:res:' + res)
resolve(res);
}).catch((err) => {
console.log('execute:Promise.all:err:' + err)
reject('execute:err:' + err);
});
});
}
execute()
.then(res => {
console.log('execute:res:' + res);
process.exit();
})
.catch(err => {
console.log('execute:err:' + err);
process.exit();
});