正文开始 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小狐狸特效 |