Promise概念介紹
// 1. Promise 是一個 構造函數,既然是構造函數, 那麼,我們就可以 new Promise() 得到一個 Promise 的實例;
// 2. 在 Promise 上,有兩個函數,分別叫做 resolve(成功之後的回調函數) 和 reject(失敗之後的回調函數)
// 3. 在 Promise 構造函數的 Prototype 屬性上,有一個 .then() 方法,也就說,只要是 Promise 構造函數創建的實例,都可以訪問到 .then() 方法
// 4. Promise 表示一個 異步操作;每當我們 new 一個 Promise 的實例,這個實例,就表示一個具體的異步操作;
// 5. 既然 Promise 創建的實例,是一個異步操作,那麼,這個 異步操作的結果,只能有兩種狀態:
// 5.1 狀態1: 異步執行成功了,需要在內部調用 成功的回調函數 resolve 把結果返回給調用者;
// 5.2 狀態2: 異步執行失敗了,需要在內部調用 失敗的回調函數 reject 把結果返回給調用者;
// 5.3 由於 Promise 的實例,是一個異步操作,所以,內部拿到 操作的結果後,無法使用 return 把操作的結果返回給調用者; 這時候,只能使用回調函數的形式,來把 成功 或 失敗的結果,返回給調用者;
// 6. 我們可以在 new 出來的 Promise 實例上,調用 .then() 方法,【預先】 爲 這個 Promise 異步操作,指定 成功(resolve) 和 失敗(reject) 回調函數;
// 注意:這裏 new 出來的 promise, 只是代表 【形式上】的一個異步操作;
// 什麼是形式上的異步操作:就是說,我們只知道它是一個異步操作,但是做什麼具體的異步事情,目前還不清楚
// var promise = new Promise()
// 這是一個具體的異步操作,其中,使用 function 指定一個具體的異步操作
/* var promise = new Promise(function(){
// 這個 function 內部寫的就是具體的異步操作!!!
}) */
const fs = require('fs')
// 每當 new 一個 Promise 實例的時候,就會立即 執行這個 異步操作中的代碼
// 也就是說,new 的時候,除了能夠得到 一個 promise 實例之外,還會立即調用 我們爲 Promise 構造函數傳遞的那個 function,執行這個 function 中的 異步操作代碼;
/* var promise = new Promise(function () {
fs.readFile('./files/2.txt', 'utf-8', (err, dataStr) => {
if (err) throw err
console.log(dataStr)
})
}) */
// 初衷: 給路徑,返回讀取到的內容
function getFileByPath(fpath) {
return new Promise(function (resolve, reject) {
fs.readFile(fpath, 'utf-8', (err, dataStr) => {
if (err) return reject(err)
resolve(dataStr)
})
})
}
/* getFileByPath('./files/2.txt')
.then(function (data) {
console.log(data + '-------')
}, function (err) {
console.log(err.message)
}) */