es6異步編程 Promise 講解 --------各個優點缺點總結
阿新 • • 發佈:2017-09-12
寫法 col 結果 require 捕獲 clas utf 方法 req
//引入模塊 let fs=require(‘fs‘); //異步讀文件方法,但是同步執行 function read(url) { //new Promise 需要傳入一個executor 執行器 //executor需要傳入兩個函數 resolve reject return new Promise((resolve,reject)=>{ fs.readFile(url,‘utf8‘,function (err,data) { if(err){ reject(err) }else{ resolve(data); } }) }) }; //缺點 套了一個promise,而且捕獲了2次,這兩個請求沒有依賴關系,時間疊加了 // read(‘./name.txt‘).then((data)=>{ // let obj={}; // obj.name=data; // read(‘./age.txt‘).then((data)=>{ // obj.age=data; // console.log(obj); //},(err)=>{ // console.log(err); // }) // // }, (err)=>{ // console.log(err); // }); //回調地獄 鏈式調用 //相對好點的方法,同步兩個異步依次執行 異常用catch捕獲 // let obj={}; // read(‘./name.txt‘).then((data)=>{ // obj.name=data; // return read(‘./age.txt‘) // }).then((data)=>{ //如果promise返回promise可以繼續then// obj.age=data; // return obj //將結果向下繼續傳遞 // }).then((data)=>{ // console.log(data) //單獨處理結果 // }).catch((err)=>{ // console.log(err) // }); //all方法是promise是類上自帶的方法,並發讀取,失敗一個都失敗了,時間只是一個讀取的時間 //第一個參數 傳遞的是數組,數組裝的是一個個promise對象 //調用後會再次返回一個promise實例 //最好的寫法 Promise.all([read(‘./name.txt‘),read(‘./age.txt‘)]).then(([name,age])=>{ //data就是promise執行成功的結果類型是數組 console.log({name,age}); }).catch((err)=>{ console.log(err) }) //race如果一個失敗了,都失敗,如果一個成功了都成功,很少用 // Promise.race([read(‘./name.txt‘),read(‘./age1.txt‘)]).then((data)=>{ // //data就是promise執行成功的結果類型是數組 // console.log(data); // }).catch((err)=>{ // console.log(err) // })
es6異步編程 Promise 講解 --------各個優點缺點總結