Promise
1. 實例化 Promise 對象
const p = new Promise(function(resolve, reject){
setTimeout(function() {
let data = '數(shù)據(jù)讀取成功'
resolve(data)
}, 1000)
})
// 調用 then 方法
p.then(function(val){ console.log(val) }, function(err){}) // 打印 '數(shù)據(jù)讀取成功'
2. 使用 Promise 封裝
let path = './poem.txt' // 需要讀取文件的相對路徑
let p = new Promise((resolve, reject) => {
fs.readFile(path, (err, data) => {
if (err) reject(err)
resolve(data)
})
})
p.then(
val => {
console.log(val.toString())
},
err => {
console.log(err)
}
)
// 封裝 AJAX
const p = new Promise((resolve, reject) => {
// 創(chuàng)建對象
const xhr = new XMLHttpRequest()
// 初始化
xhr.open('GET', 'https://api.apiopen.top/getJoke')
// 發(fā)送
xhr.send()
// 綁定事件腾节,處理響應結果
xhr.onreadystatechange = function() {
if(xhr.readyState === 4) {
if(xhr.status >= 200 && xhr.status < 300 ){
// console.log(xhr.response)
resolve(xhr.response)
} else {
// console.log(xhr.status)
reject(xhr.status)
}
}
}
})
p.then(
val => {
console.log(val)
},
err => {
console.log(err)
}
)
3. then
// then 返回的結果是 Promise 對象武通,對象的狀態(tài)由回調函數(shù)的執(zhí)行結果決定
// 如果回調函數(shù)中返回的結果是非 Promise 類型的屬性,狀態(tài)則為成功将塑,返回值為對象的成功的值
const fs = require('fs')
const path1 = './poem1.txt'
const path2 = './poem2.txt'
const p = new Promise((resolve, reject) => {
fs.readFile(path1, (err, data) => {
if(err) reject(err)
resolve(data)
})
})
p.then(
val => {
return new Promise((resolve, reject) => {
fs.readFile(path2, (err, data) => {
if(err) reject(err)
resolve([val, data])
})
})
},
err => {
console.log(err)
}
).then(
val => {
console.log(val.join('\n\n').toString())
},
err => {
console.log(err)
}
)