Promise 的三种状态:pending fulfilled rejected
1 2 3 4 5 6 7 8 9 10 11 12
| const promise1 = new Promise((resolve, reject) =>{ }) console.log("promise1",promise1);
const promise2 = new Promise((resolve, reject) =>{ setTimeout(()=>{ console.log('promise2 resolve 前',promise2) resolve(); console.log('promise2 resolve 后',promise2) }) })
|

1 2 3 4 5 6 7
| const promise3 = new Promise((resolve, reject) =>{ setTimeout(()=>{ console.log('promise3 resolve 前',promise2) resolve(); console.log('promise3 resolve 后',promise2) }) })
|

更为简便的方法, 定义时直接改变 Promise 的状态
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| const promise4 = Promise.resolve('promise4 data') console.log('promise4', promise4) promise4.then(data=>{ console.log('data',data) }).catch(err=>{ console.log('error',err) })
const promise5 = Promise.reject('promise5 error') console.log('promise5', promise5) promise5.then(data=>{ console.log('data2',data2) }).catch(err=>{ console.log('error2',err2) })
|

Promise 解决回调地域
回调地狱示例
1 2 3 4 5 6 7 8 9 10 11
| let fs = require('fs') fs.readFile('./a.txt','utf8',function(err,data){ fs.readFile(data,'utf8',function(err,data){ fs.readFile(data,'utf8',function(err,data){ console.log(data) }) }) })
|
解决
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| let fs = require('fs') function read(url){ return new Promise((resolve,reject)=>{ fs.readFile(url,'utf8',function(error,data){ error && reject(error) resolve(data) }) }) }
read('./a.txt') .then(data=>{ return read(data) }) .then(data=>{ return read(data) }) .then(data=>{ console.log(data) })
|