1、promise的概念
// Promise es6
// generator
// async await 都需要学promise
// koa generator 变成了async await axios redux-saga
// fetch
const Promise = require("./14.promise");
// 1.promise 是一种异步流程的控制手段 回调地狱 第一个的输出是第二个的输入
// promise 可以链式调用
// 2. promise 可以支持多个并发的请求,获取并发请求中的数据
// 3.这个promise可以解决异步的问题,本身不能说promise是异步的。
// promise的关键字 (承诺) resolve 成功 reject 失败
// 如果一旦promise 成功了就不能失败,相反是一样的。
// 只有状态是等待的状态时,才可以转化状态
// 事件环机制
// promise 只有一个参数,叫executor,默认new时就会调用
// 每一个promise的实例上都有一个then方法,then方法中有两个参数,一个叫做成功的函数,一个叫做失败的函数
// promise 中发生错误 就会执行失败态,
// promise 不在传递回调函数了
// promise的then方法是异步的。
let p=new Promise((resolve,reject)=>{
// 默认promise中的executor是同步执行的
console.log(1);
setTimeout(() => {
resolve('好的!');
}, 1000);
})
p.then((value)=>{
//成功的原因
console.log(value);
},(err)=>{
//失败的原因
console.log(err);
})
console.log(2);
2、手写promise
class Promise {
constructor(executor) {
this.status = "pending";
this.value = undefined;
this.reason = undefined;
let resolve = (value) => {
if (this.status === "pending") {
this.status = "resolved";
}
this.value = value;
};
let reject = (reason) => {
if (this.status === "pending") {
this.status = "rejected";
}
this.reason = reason;
};
try {
executor(resolve, reject);
} catch (e) {
reject(e);
}
}
then(onFufilled, onRejected) {
if (this.status === "resolved") {
onFufilled(this.value);
}
if (this.status == "rejected") {
onRejected(this.reason);
}
}
}
module.exports=Promise;
3、Promise 用法
let Promise=require('./14.promise')
let p=new Promise((resolve,reject)=>{
resolve('请求成功');
reject('请求成功');
});
p.then(data=>{
console.log('成功!'+data);
})