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
部分傳入的函數能夠爲空,便可不寫文件讀取失敗後的操做,promise
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);
})
複製代碼