简单说promise就是一个承诺,将来才会实现。好比媳妇等我有钱了给你买包, 先等着,给你个承诺,等有钱了再买。承诺就是一个等待态,你能够设置成功或者失败,即买包和不买包,这就是下面所说的三个状态了。es6
简单说就是Promise对象有三种状态,一旦成功就不能失败,一旦失败就不能成功编程
let fs = require("fs");
fs.readFile("a.txt",'utf8',function(data1){
fs.readFile("b.txt",'utf8',function(data2){
console.log(data1,data2);
})
})
复制代码
data2数据须要依赖上一次的返回结果data1时,就会形成嵌套问题,当无限嵌套下去,就会造成回调地狱问题, 下面咱们来看promise基础用法,怎么解决这类问题数组
let p =new Promise((resolve,reject)=>{
//执行器默认在new时就会被调用,当即执行
console.log("1")
resolve("123") //成功函数resolve,传递了123
});
复制代码
这有什么用呢,咱们来看p的then方法怎么获得123promise
p.then(value=>{
//value指的上面resolve传递的参数,成功的缘由
console.log(value)
},err=>{
//失败的缘由, reject传递的参数
console.log(err)
})
.then(value=>{
console.log(value)
},err=>{
console.log(err)
})
复制代码
let fs = require('fs');
function read(file){
return new Promise(function(resolve,reject){
fs.readFile(file,'utf8',function(err,data){
if (err) {
return reject(err);
}
resolve(data);
})
})
}
read('./a.txt').then(function(data){
return read('./b.txt');
}).then(function(data){
console.log(data);
})
复制代码
let Promise = require('./Promise');
let promise = new Promise((resolve,reject)=>{
resolve('hello');
});
promise.then().then().then(data=>{ //能够无限的then,但结果仍会拿到
console.log(data); //'hello'
},err=>{
console.log('err',err);
})
复制代码
p.then().then().catch(err=>{
console.log(err)
})
复制代码
let fs = require("fs");
function read(path) {
return new Promise((resolve, reject) => {
fs.readFile(path, 'utf8', function(err, data) {
if (err) return reject(err);
resolve(data);
});
});
}
Promise.all([read("1.txt"), read("2.txt")]).then( //能够then说明Promise.all()返回结果也是promise
data => {
console.log(data);// [1.txt内容,2.txt内容]
},
err => {
console.log(err);
}
);
复制代码
let fs = require("fs");
function read(path) {
return new Promise((resolve, reject) => {
fs.readFile(path, 'utf8', function(err, data) {
if (err) return reject(err);
resolve(data);
});
});
}
Promise.all([read("1.txt"), read("2.txt")]).then( //能够then说明Promise.all()返回结果也是promise
data => {
console.log(data);// [1.txt或者2.txt内容]
},
err => {
console.log(err);
}
);
复制代码
读到这里,相信你们看到这里都应该大概对promise有必定的了解,下一章带领你们手写一套符合promise A+规范的代码。bash