简介:
Promise是异步编程,它的出现是用来解决回调地狱(callback),Promise对象用来封装一个异步操作,异步方法不是立即返回最终值,而是返回在将来某个时间点提供值的Promise。
Promise
对象表示异步操作的最终完成(或失败)及其结果值。
基本语法:
new Promise(function (resolve, reject) { console.log("Run"); });
Promise的三种状态
-
待定:初始状态,既不满足也不拒绝。
-
已实现:表示操作已成功完成。
-
拒绝:表示操作失败。
Promise的作用
在没有Promis之前,我们在回调中有另一个异步操作的时候,我们就只能使用嵌套的方式来解决,而Promise里面有一个then方法返回,它最多需要有廖哥参数:Promise 的成功和失败情况的回调函数。
这里作者使用 Node.js
做例子:
const fs = require('fs');
fs.readFile('为学.md',(err,data1) => {
fs.readFile('插秧诗.md',(err,data2) => {
fs.readFile('观书有感.md',(err,data3) => {
let result = data1 + '\r\n' + data2 + '\r\n'+data3;
console.log(result);
})
})
})
再使用 Promise 这样解决:
// 使用 promise 实现
const p = new Promise((resolve, reject) => {
fs.readFile("为学.md",(err,data) => {
resolve(data);
})
});
p.then(value=>{
return new Promise((resolve, reject) => {
fs.readFile('插秧诗.md',(err,data) => {
resolve([value,data]);
})
})
}).then(value =>{
return new Promise((resolve, reject) => {
fs.readFile('观书有感.md',(err,data) => {
// 压入
value.push(data);
resolve(value);
});
});
}).then(value =>{
// console.log(value.toString());
console.log(value.join('\r\n'));
})
结果如上图一样,虽然书写变得麻烦了一些,但是这样可以避免回调地狱,代码更有清晰度。