目的: Promise
是书写异步代码的另一种方式, 解决回调函数嵌套的问题(回调地狱)
基本语法
创建Promise
对象
new Promise
的时候会执行传入的函数
//Promise对象传入一个函数,函数提供两个函数参数resolve、reject
const promise = new Promise((resolve, reject) => {
// 内部封装一个异步操作
// 成功则调用resolve
// 失败调用reject
})
使用
promise.then((res) => { ... }).catch((err) => { ... })
Promise是一个构造函数
Promise.prototype上包含
then()
、catch()
方法通过
then
方法来指定成功的回调函数通过
catch
方法来指定失败的回调函数
Promise的三种状态
- pending: 待定(等待结果)
- fulfilled: 成功 (已兑现), 调用了
resolve
, Promise的状态就会被标记成成功 - rejected: 失败 (已拒绝), 调用了
reject
, Promise的状态就会被标记成失败
一旦Promise的状态发生变化,状态就不会再改变了!就像他的名字Promise一样,承诺了就不会改变。
Promise链式调用
解决回调地狱的问题
因为
Promise.prototype.then
和Promise.prototype.catch
方法返回的是 promise,只要是 promise 对象都有这两个方法,所以它们可以被链式调用。
import fs from 'then-fs'
fs.readFile('1.txt', 'utf-8').then(res => {
console.log('读取成功:' + res);
return fs.readFile('2.txt', 'utf-8')
}).then((res) => {
console.log('读取成功:' + res);
return fs.readFile('3.txt', 'utf-8')
}).then((res) => {
console.log('读取成功:' + res);
}).catch(err => {
console.log('读取失败:' + err);
})
发表回复