¸üÐÂʱ¼ä:2022Äê11ÔÂ04ÈÕ17ʱ00·Ö À´Ô´:ÀÖÓãµç¾º ä¯ÀÀ´ÎÊý:
ΪÁ˽â¾ö»Øµ÷µØÓüµÄÎÊÌ⣬ES6(ECMAScript 2015)ÖÐÐÂÔöÁË Promise µÄ¸ÅÄPromise ÊÇÒ»¸ö¹¹Ô캯Êý£¬¿ÉÒÔÓÃÀ´´´½¨ Promise µÄʵÀý const p = new Promise()£¬new ³öÀ´µÄ Promise ʵÀý¶ÔÏ󣬴ú±íÒ»¸öÒì²½²Ù×÷¡£
Promise.prototype Éϰüº¬Ò»¸ö .then() ·½·¨£¬ ÿһ´Î new Promise() ¹¹Ô캯ÊýµÃµ½µÄʵÀý¶ÔÏ󣬶¼¿ÉÒÔͨ¹ýÔÐÍÁ´µÄ·½Ê½·ÃÎʵ½ .then() ·½·¨£¬ÀýÈç p.then()¡£
ͬʱ.then() ·½·¨ÓÃÀ´Ô¤ÏÈÖ¸¶¨³É¹¦ºÍʧ°ÜµÄ»Øµ÷º¯Êý
p.then(³É¹¦µÄ»Øµ÷º¯Êý£¬Ê§°ÜµÄ»Øµ÷º¯Êý)
p.then(result => { }, error => { })
µ÷Óà .then() ·½·¨Ê±£¬³É¹¦µÄ»Øµ÷º¯ÊýÊDZØÑ¡µÄ¡¢Ê§°ÜµÄ»Øµ÷º¯ÊýÊÇ¿ÉÑ¡µÄ¡£»ùÓÚÒÔÉϵÄÀíÂÛ£¬ÎÒÃÇÀ´¿´PromiseµÄ³£¼ûÓ÷¨¡£
»ùÓڻص÷º¯Êý°´Ë³Ðò¶ÁÈ¡ÎļþÄÚÈÝ£¬¾ßÌå´úÂëÈçÏ£º
//¶ÁÈ¡Îļþ1.txt
fs.readFile('./files/1.txt', 'utf8', (err1, r1) => {
if (err1) return console.log(err1.message) //¶ÁÈ¡Îļþ1ʧȡ
console, log(r1) //¶ÁÈ¡Îļþ 1 ³É¹¦
//¶ÁÈ¡Îļþ2.txt
fs.readFile('./files/2.txt', 'utf8', (err2, r2) => { //ʫȡÎļþ 2 ʧ°Ü
if (err2) return console.log(err2.message)
console.log(r2£© //¶ÁÈ¡Îļþ 2 ³É¹¦
//¶ÁÈ¡Îļþ3.txt
fs.readFile('./files/3.txt', 'utf8', (err3, r3) => {
if (err3) return console.log(err3.message) //¶ÁÈ¡Îļþ 3ʧ°Ü
console.log(r3) //¶ÁÈ¡Îļþ 3 ³É¹¦
})
})
})
»ùÓÚ then-fs ¶ÁÈ¡ÎļþÄÚÈÝ
ÓÉÓÚ node.js ¹Ù·½ÌṩµÄ fs Ä£¿é½öÖ§³ÖÒԻص÷º¯ÊýµÄ·½Ê½¶ÁÈ¡Îļþ£¬²»Ö§³Ö Promise µÄµ÷Ó÷½Ê½¡£Òò´Ë£¬ÐèÒªÏÈÔËÐÐÈçϵÄÃüÁ°²×° then-fs Õâ¸öµÚÈý·½°ü£¬´Ó¶øÖ§³ÖÎÒÃÇ»ùÓÚ Promise µÄ·½Ê½¶ÁÈ¡ÎļþµÄÄÚÈÝ¡£
npm install then-fs
µ÷ÓÃthen-fsÌṩµÄreadFile()·½·¨£¬¿ÉÒÔÒì²½µØ¶ÁÈ¡ÎļþµÄÄÚÈÝ£¬CµÄ·µ»ØÖµÊÇPromiseµÄʵÀý¶ÔÏó¡£Òò´Ë¿ÉÒÔµ÷ÓÃ.then()·½·¨ÎªÃ¿¸öPromiseÒì²½²Ù×÷Ö¸¶¨³É¹¦ºÍʧ°ÜÖ®ºóµÄ»Øµ÷º¯Êý¡£Ê¾Àý´úÂëÈçÏ£º
then-fs µÄ»ù±¾Ê¹ÓÃ
µ÷Óà then-fs ÌṩµÄ readFile() ·½·¨£¬¿ÉÒÔÒì²½µØ¶ÁÈ¡ÎļþµÄÄÚÈÝ£¬ËüµÄ·µ»ØÖµÊÇ Promise µÄʵÀý¶ÔÏó¡£Òò´Ë¿ÉÒÔµ÷Óà .then() ·½·¨ÎªÃ¿¸ö Promise Òì²½²Ù×÷Ö¸¶¨³É¹¦ºÍʧ°ÜÖ®ºóµÄ»Øµ÷º¯Êý¡£Ê¾Àý´úÂëÈçÏ£º
/¡ï¡ï
*»ùÓÚPromiseµÄ·½Ê½¶ÁÈ¡Îļþ
*/
impoik: thenFs from 'then-fs'
//×¢Ò⣺.then£¨£©ÖеÄʧ°Ü»Øµ÷ÊÇ¿ÉÑ¡µÄ£¬¿ÉÒÔ±»Ê¡ÂÔ
thenFs.readFile('./files/1.txt','utf8').then(r1=>{console.log(r1)},err1 =>{console.log(err1.message)})
thenFs.readFile('./files/2.txt','utf8').then(r2 =>{console.log(r2)},err2 =>{console.log(err2.message)})
thenFs.readFile('./files/3.txt','utf8').then(r3 =>{ console.log(r3)},err3 =>{console.log(err3.message)})
×¢Ò⣺ÉÏÊöµÄ´úÂëÎÞ·¨±£Ö¤ÎļþµÄ¶Áȡ˳Ðò£¬ÐèÒª×ö½øÒ»²½µÄ¸Ä½ø!
.then() ·½·¨µÄÌØÐÔ
Èç¹ûÉÏÒ»¸ö .then() ·½·¨Öзµ»ØÁËÒ»¸öÐ嵀 Promise ʵÀý¶ÔÏó£¬Ôò¿ÉÒÔͨ¹ýÏÂÒ»¸ö .then() ¼ÌÐø½øÐд¦Àí¡£Í¨¹ý .then() ·½·¨µÄÁ´Ê½µ÷Ó㬾ͽâ¾öÁ˻ص÷µØÓüµÄÎÊÌâ¡£
»ùÓÚ Promise °´Ë³Ðò¶ÁÈ¡ÎļþµÄÄÚÈÝ
Promise Ö§³ÖÁ´Ê½µ÷Ó㬴ӶøÀ´½â¾ö»Øµ÷µØÓüµÄÎÊÌ⡣ʾÀý´úÂëÈçÏ£º
thenFs.readFile('./files/1.txt'£¬'utf8')// 1.·µ»ØÖµÊÇPromiseµÄʵÀý¶ÔÏó
.then((r1)=>{// 2.ͨ¹ý.thenΪµÚÒ»¸öPromiseʵÀýÖ¸¶¨³É¹¦Ö®ºóµÄ»Øµ÷º¯Êý
console.log(r1)
return thenFs.readFile('./files/2.txt'£¬/utf8')// 3.ÔÚµÚÒ»¸ö.thenÖзµ»ØÒ»¸öеÄPromiseʵÀý¶ÔÏó
})
.then((r2)=>{//4.¼ÌÐøµ÷ÓÃ.then£¬ÎªÉÏÒ»¸ö.then µÄ·µ»ØÖµ(еÄPromise ʵÀý£©Ö¸¶¨³É¹¦Ö®ºóµÄ»Øµ÷º¯Êý
console.log(r2)
return thenFs.readFile('./files/3.txt','utf8')// 5.ÔÚµÚ¶þ¸ö.thenÖÐÔÙ·µ»ØÒ»¸öеÄPromiseʵÀý¶ÔÏó
})
.then((r3)=>{// 6.¼ÌÐøµ÷ÓÃ.then,ΪÉÏÒ»¸ö.then µÄ·µ»ØÖµ£¨ÐµÄPromiseʵÀý£©Ö¸¶¨³É¹¦Ö®ºóµÄ»Øµ÷º¯Êý
console.log(r3)
})
ͨ¹ý .catch ²¶»ñ´íÎó
ÔÚ Promise µÄÁ´Ê½²Ù×÷ÖÐÈç¹û·¢ÉúÁË´íÎ󣬿ÉÒÔʹÓà Promise.prototype.catch ·½·¨½øÐв¶»ñºÍ´¦Àí£º
thenFs.readFile('./files/11.txt'£¬'utf8'£©//Îļþ²»´æÔÚµ¼Ö¶Áȡʧ°Ü£¬ºóÃæµÄ3¸ö.then ¶¼²»Ö´ÐÐ
.then(r1 =>{
console.log(r1)
return thenFs.readFile('./files/2.txt','utf8')
})
.then(r2=> {
console.log(r2)
return thenFs.readFile('./files/3.txt', 'utf8')
})
.then(r3 =>(
console.log(r3)
})
.catch(err =>{//²¶»ñµÚ1Ðз¢ÉúµÄ´íÎ󣬲¢Êä³ö´íÎóµÄÏûÏ¢
console.log(err.message)
})
Promise.all() ·½·¨
Promise.all() ·½·¨»á·¢Æð²¢ÐÐµÄ Promise Òì²½²Ù×÷£¬µÈËùÓеÄÒì²½²Ù×÷È«²¿½áÊøºó²Å»áÖ´ÐÐÏÂÒ»²½µÄ .then²Ù×÷(µÈ´ý»úÖÆ)¡£Ê¾Àý´úÂëÈçÏ£º
//1.¶¨ÒåÒ»¸öÊý×飬´æ·Å3¸ö¶ÁÎļþµÄÒì²½²Ù×÷
const promiseArr = [
thets.readFile('./files/11.txt','utf8').
thenFs.readFile('./files/2.txt','utf8'),
thenFs.readFile('./files/3.txt','utf8'),
]
// 2.½« PromiseµÄÊý×飬×÷ΪPromise.all(£©µÄ²ÎÊý
Promise.all(promiseArr)
.then(([r1£¬r2£¬r3]£©=>{//2.1ËùÓÐÎļþ¶ÁÈ¡³É¹¦£¨µÈ´ý»úÖÆ£©
console.log(r1, r2, r3)
})
.catch(err =>{// 2.2²¶»ñ PromiseÒì²½²Ù×÷ÖеĴíÎó
console.log(err.message)
})
×¢Ò⣺Êý×éÖÐ Promise ʵÀýµÄ˳Ðò£¬¾ÍÊÇ×îÖÕ½á¹ûµÄ˳Ðò!
Promise.race() ·½·¨
Promise.race() ·½·¨»á·¢Æð²¢ÐÐµÄ Promise Òì²½²Ù×÷£¬Ö»ÒªÈκÎÒ»¸öÒì²½²Ù×÷Íê³É£¬¾ÍÁ¢¼´Ö´ÐÐÏÂÒ»²½µÄ .then ²Ù×÷(ÈüÅÜ»úÖÆ)¡£Ê¾Àý´úÂëÈçÏ£º
//1.¶¨ÒåÒ»¸öÊý×飬´æ·Å3¸ö¶ÁÎļþµÄÒì²½²Ù×÷
const promiseArr =[
thenFs.readFile('./files/1.txt', 'utf8'),
thenFs.readFile('./files/2.txt', 'utf8').
thenFs.readFile('./files/3.txt', 'utf8').
]
// 2.½« Promise µÄÊý×飬×÷Ϊ Promise.race()µÄ²ÎÊý
Pronise.race(promiseArr)
.then((result)=>{//2.1Ö»ÒªÈκÎÒ»¸öÒì²½²Ù×÷Íê³É£¬¾ÍÁ¢¼´Ö´Ðгɹ¦µÄ»Øµ÷º¯Êý£¨ÈüÅÜ»úÖÆ£©
console.log(result)
})
.catch(err =>{// 2.2²¶»ñPromise Òì²½²Ù×÷ÖеĴíÎó
console.log(err.message)
})
±±¾©Ð£Çø