簡單說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