首页 > 知识百科 > 正文

【ES6】Promise 原创

Promise

回调地狱

const fs = require('fs');fs.readFile('./a.txt', 'utf-8' , (err, data) => { if(err) throw err; console.log(data); fs.readFile('./b.txt', 'utf-8', (err, data) => { if (err) throw err; console.log(data); fs.readFile('./c.txt', 'utf-8', (err, data) => { if(err) throw err; console.log( data); }) })})

Promise

Promise对象可以回调解决地狱的问题

Promise可以理解为一个容器,里面可以编写异步程序的代码

基本实现
const fs = require('fs');//1、创建对象let p = new Promise((resolve ,reject) => { // 把异步任务成功的结果传递给resolve函数,把失败的结果传递给reject函数 fs.readFile('./a.txt', 'utf-8', (err, data) => { //读取文件的时候,没有错误err=null, 有错误err={} err ?reject(err) :resolve(data); })});//2、获取成功失败结果p. then(res => console.log(res), err => console.log(err));
Promise 透明状态

pending returned returned

初始状态pending,等待中,此时promise的结果为undefined;

当调用resolve(data)时,状态变为fulfilled

当调用reject(err)时,状态变为错误

当达到最终的fulfilled或rejected时,promise的状态就不会再改变了(所以多次调用resolve,后面的resolve都无效,只取一次)

// 1、创建对象
let p = new Promise((resolve,reject) => {
resolve();
resolve(123);//这次调用无效
});

// 2、获取成功失败结果
p.then(res => console.log(res), err => console.log(err));

Promise同步异步?
< pre>console.log(1);//new Promise属于同步代码new Promise((resolve,reject) => { console.log(2);resolve(3);console.log(4);} ).then(res => console.log(res), err => console.log(err));//.then这里是异步的console.log(5);// 1 2 4 5 3
then 的链式调用
const fs = require('fs');let p1 = new Promise((resolve,reject) => { fs.readFile ('./a.txt', 'utf-8', (错误, 数据) => { 错误?拒绝(错误):解析(数据); })});let p2 = new Promise((resolve,reject) => { fs.readFile('./b.txt', 'utf-8', (err, data) => { err ?拒绝(err ) : 解析(数据); })});let p3 = new Promise((解析, 拒绝) => { fs.readFile('./c.txt', 'utf-8', (err, data) = > { err ?reject(err) :resolve(data); })});//前一个then返回一个Promise对象//后一个then可以得到前一个Promise对象的成功状态的值p1.then(r1 = > { console.log(r1); //aaa 返回 p2}).then(r2 => { console.log(r2); //bbb 返回 p3;}).then(r3 => { console.log(r3 ); //ccc})const fs = require('fs');function myReadFile(filename) { return p = new Promise((resolve,reject) => { fs.readFile(filename, 'utf-8', ( err, data) => { err ?reject(err) :resolve(data); }) })}//前一个then返回一个Promise对象//后一个then可以得到前一个Promise对象的成功状态的值myReadFile ('./a.txt').then(r1 => { console.log(r1); //aaa return myReadFile('./b.txt');}).then(r2 => { console.log(r2); //bbb return myReadFile('./c.txt');}).then (r3 => { console.log(r3); //ccc})

【ES6】Promise 原创由知识百科栏目发布,感谢您对的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“【ES6】Promise 原创