既然 Promise 建立的實例,是一個異步操做,那麼,這個 異步操做的結果,只能有兩種狀態:promise
const fs = require('fs') function getFileByPaht(fpath) { var promise = new Promise(function (resolve, reject) { fs.readFile(fpath, 'utf-8', (err, dataStr) => { if (err) return reject(err); resolve(dataStr); }); }); return promise; } getFileByPaht('./files/3.txt') .then(function (dataStr) { console.log(dataStr); }, function (err) { console.log(err.message); })
.then()
方法解決地獄回調
注意: Promise的
reject
部分傳入的函數能夠爲空,便可不寫文件讀取失敗後的操做,
getFileByPath('./files/1222.txt') .then(function (data) { console.log(data); return getFileByPath('./files/2.txt'); }, .then(function (data) { console.log(data); return getFileByPath('./files/3.txt'); }) .then(function (data) { console.log(data); })
狀況一:在讀取文件出錯的部分報錯,但不影響後方代碼的執行異步
getFileByPath('./files/1222.txt') .then(function (data) { console.log(data); return getFileByPath('./files/2.txt'); }, function (err) { console.log('讀取失敗:' + err.message); return getFileByPath('./files/2.txt'); }) .then(function (data) { console.log(data); return getFileByPath('./files/3.txt'); }) .then(function (data) { console.log(data); })
狀況二:若是前面任何的Promise執行失敗,就中止運行後面的方法(catch捕獲機制)函數
getFileByPath('./files/1222.txt') .then(function (data) { console.log(data); return getFileByPath('./files/2.txt'); }) .then(function (data) { console.log(data); return getFileByPath('./files/3.txt'); }) .then(function (data) { console.log(data); }) .catch(function (err) { console.log('異常捕獲: ' + err.message); })