Promise介绍及使用场景

正文开始

https://www.cnblogs.com/duxiu-fang/p/11244615.html https://segmentfault.com/a/1190000039361741 ##正文来源于第一篇: Promise 介绍   Promise 是一个构造函数,是异步编程的一种解决方案。所谓Promse,它本身就是一个容器,里面保存着异步操作的结果,对的,这和回调函数类似。   Promise 容器本身不是异步的,而里面封装一个异步任务。他有三种状态,即:1.pending(进行中)、2.resolved(成功)、3.rejected(失败)。状态只能变为一种。 Promise 获取文件信息   【方法解读】 p1 = new Promise((resolve, reject)=>{}); 定义一个异步函数,需要参数有2个:1成功时执行函数 2失败时执行函数,它的这两个参数只能通过.then(a,b)来传入。 p1执行.then()之后会可以继续执行下一个then: p1.then(a1).then(b1); p1.then 意思是执行某个Promise异步函数,传入以上2个参数。 ~~~ const fs = require('fs'); let p1 = new Promise((resolve, reject) => { fs.readFile('./data/a.txt', 'utf8', (error, data) => { if (error) { reject(error); } else { resolve(data); } }); }); let p2 = new Promise((resolve, reject) => { fs.readFile('./data/b.txt', 'utf8', (error, data) => { if (error) { reject(error); } else { resolve(data); } }); }); let p3 = new Promise((resolve, reject) => { fs.readFile('./data/c.txt', 'utf8', (error, data) => { if (error) { reject(error); } else { resolve(data); } }); }); // then 的链式编程 p1 .then(data => { console.log('a的数据', data); return p2; // 当 p1 读取成功的时候 return 第2个 Promise 对象p2,后续的 then 意思是继续执行这个 p2异步函数 }, error => { console.log('读取文件a失败了', error); }) .then(data => { console.log('b的数据', data); return p3; }, error => { console.log('读取文件b失败了', error); }) .then(data => { console.log('c的数据', data); }, error => { console.log('读取文件c失败了', error); }) ~~~ 显然,上面这个例子显得特别麻烦! 选择,让我们封装 Promise ~~~ const fs = require('fs'); const pReadFile = (filePath) => { return new Promise((resolve, reject) => { fs.readFile(filePath, 'utf8', (error, data) => { if (error) { reject(error); } else { resolve(data); } }); }); }; pReadFile('./data/a.txt') .then(data => { console.log('a文件数据: ', data); return pReadFile('./data/b.txt'); }) .then(data => { console.log('b文件数据: ', data); return pReadFile('./data/c.txt'); }) .then(data => { console.log('c文件数据: ', data); }); ~~~ Promise 配合 AJAX 获取信息 data.json文件: ~~~ { "users": [ { "id": 1, "username": "admin-1", "age": 18, "job": 2 }, { "id": 2, "username": "admin-2", "age": 18, "job": 4 }, { "id": 3, "username": "admin-3", "age": 18, "job": 5 } ], "jobs": [ { "id": 1, "name": "学生" }, { "id": 2, "name": "老师" }, { "id": 3, "name": "司机" }, { "id": 4, "name": "演员" }, { "id": 5, "name": "工程师" }, { "id": 6, "name": "程序员" } ] } ~~~ 例子: ~~~ 独秀不爱秀
~~~

正文结束

js 正则替换返回值做回调函数 metamask小狐狸特效