作用
异步执行的过程中,可以很好地将代码和结果相分离,解决地狱回调多层嵌套的问题,并且更利于代码复用
特征
1.promise是一个构造函数
2.promise有两个构造函数,一个resolvge成功的回调函数和reject失败的回调函数
3.promise原型对象时有个.then()方法第一个参数是resolvge成功的回调函数,第二个参数(可选)是rejected状态的回调函数,catch()方法则表示指定发生错误时的回调函数
4.只要new一个Promise实例就会立刻执行这个异步操作中的代码
function get(path) {
var promise = new promise(function() {
false.readFile(path, 'utf-8', (err, data) => {
if (err) throw err;
console.log(data)
});
});
// 会直接显示data数据,如果不想显示,用一个函数包裹起来
}
get('./read.txt');
// 包裹起来要实例化才会显示数据
.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);
});
读取多个文件
错误示范,嵌套层次太多,结构不清晰
// 错误示范
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);
});