Promise的執行順序記錄:
前言:Javascript執行環境是單線程的,也就是說JS環境中負責解釋和執行的線程只有一個;那么Promise函數在JavaScript中執行時的順序(紙上得來終覺淺)!
D級:
testFunction() { console.log(`console 1`); new Promise((resolve, reject) => { console.log(`console 2`); resolve(console.log(`console 3`)); reject(console.log(`console 4`)) }).then().catch(() => { console.log(`consolve 5`) }); console.log(`console 6`) } //-->運行結果是 console 1;console 2;console 3;console 4;console 6
C級:
testFunction() { console.log(`console 1`); new Promise((resolve, reject) => { console.log(`console 2`); resolve(console.log(`console 3`)); reject(console.log(`console 4`)) }).then(() => { setTimeout(() => { console.log(`console 7`) },0) }).catch(() => { console.log(`consolve 5`) }); console.log(`console 6`) } // -->console 1;console 2;console 3;console 4;console 6;console 7
B級:
testFunction() { console.log(`console 1`); new Promise((resolve, reject) => { console.log(`console 2`); resolve(console.log(`console 3`)); reject(console.log(`console 4`)) }).then(() => { setTimeout(() => { console.log(`console 7`); new Promise(() => { console.log(`console 8`) }).then(console.log(`console 9`)) },0) }).catch(() => { console.log(`consolve 5`) }); console.log(`console 6`) } // -->console 1;console 2;console 3;console 4;console 6;console 7;console 8;console 9
A級:
testFunction() { console.log(`console 1`); setTimeout(() => { new Promise(() => { console.log(`console 10`); }).then(console.log(`console 11`)); },0); new Promise((resolve, reject) => { console.log(`console 2`); resolve(console.log(`console 3`)); reject(console.log(`console 4`)) }).then(() => { setTimeout(() => { console.log(`console 7`); new Promise(() => { console.log(`console 8`) }).then(console.log(`console 9`)) },0) }).catch(() => { console.log(`consolve 5`) }); console.log(`console 6`) }//-->console 1;console 2;console 3;console 4;console 6;console 10;console 11;console 7;console 8;console 9
S級:
testFunction() { console.log(`console 1`); setTimeout(() => { new Promise(() => { console.log(`console 10`); }).then(console.log(`console 11`)); },0); let letP =new Promise(() => { setTimeout(() => { console.log(`console 12`); },0) }); promiseFn(letP); function promiseFn(fn){ console.log(`console 13`) return fn; }; new Promise((resolve, reject) => { console.log(`console 2`); resolve(console.log(`console 3`)); reject(console.log(`console 4`)) }).then(() => { setTimeout(() => { console.log(`console 7`); new Promise(() => { console.log(`console 8`) }).then(console.log(`console 9`)) },0) }).catch(() => { console.log(`consolve 5`) }); console.log(`console 6`) } //-->consolve 1;consolve 13;consolve 2;consolve 3;consolve 4;consolve 6;consolve 10;consolve 11;consolve 12;consolve 7;consolve 8;consolve 9
簡單小結:在一個函數中執行順序-->已申明的函數-->new Promise-->setTimeout;在Promise函數中后執行.then()函數;
