作用
異步執(zhí)行的過程中塞淹,可以很好地將代碼和結(jié)果相分離,解決地獄回調(diào)多層嵌套的問題罪裹,并且更利于代碼復(fù)用
特征
1.promise是一個(gè)構(gòu)造函數(shù)
2.promise有兩個(gè)構(gòu)造函數(shù)饱普,一個(gè)resolvge成功的回調(diào)函數(shù)和reject失敗的回調(diào)函數(shù)
3.promise原型對(duì)象時(shí)有個(gè).then()方法第一個(gè)參數(shù)是resolvge成功的回調(diào)函數(shù),第二個(gè)參數(shù)(可選)是rejected狀態(tài)的回調(diào)函數(shù),catch()方法則表示指定發(fā)生錯(cuò)誤時(shí)的回調(diào)函數(shù)
4.只要new一個(gè)Promise實(shí)例就會(huì)立刻執(zhí)行這個(gè)異步操作中的代碼
function get(path) {
var promise = new promise(function() {
false.readFile(path, 'utf-8', (err, data) => {
if (err) throw err;
console.log(data)
});
});
// 會(huì)直接顯示data數(shù)據(jù)状共,如果不想顯示套耕,用一個(gè)函數(shù)包裹起來
}
get('./read.txt');
// 包裹起來要實(shí)例化才會(huì)顯示數(shù)據(jù)
.then方法
function get(path) {
var promise = new promise(function(resolve, reject) {
false.readFile(path, 'utf-8', (err, data) => {
if (err) return reject(err);
resolve(data);
});
});
return promise;
}
// 用.then方法
var p = get('./read.txt');
p.then(function(data) {
console.log(data);
}, function(err) {
console.log(err);
});
讀取多個(gè)文件
錯(cuò)誤示范,嵌套層次太多峡继,結(jié)構(gòu)不清晰
// 錯(cuò)誤示范
get('./read.txt')
.then(function(data) {
console.log(data);
get('./read2.txt')
.then(function(data) {
console.log(data);
get('./read3.txt')
.then(function(data) {
console.log(data);
});
});
});
正確示范
// 正確示范
get('./read.txt')
.then(function(data) {
console.log(data);
return get('./read2.txt')
})
.then(function(data) {
console.log(data);
return get('./read3.txt')
});
.then(function(data) {
console.log(data);
});