最近在做项目的时候,使用到了几次promise,但是之前学习的东西,由于不经常使用,所以导致大部分内容都已经忘记了。今天,再次学习Promise相关的内容,也感觉自己收获蛮多。下面,就来做一个简单的总结。
Promise 是异步编程的一种解决方案,比传统的解决方案——回调函数和事件——更合理和更强大。
所谓Promise
,简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果。从语法上说,Promise 是一个对象,从它可以获取异步操作的消息。
promise的三种状态
-
pending
(进行中) -
fulfilled
(已成功) -
rejected
(已失败)// 下面来看看代码 代码是写在vue里面的方法 所以没有用function 放在mouted this调用
runAsync1() {
let p = new Promise((resolve, reject) => { setTimeout(() => { console.log(“链式调用1111”); resolve(“我是数据1111”); }, 4000); }); return p; }, runAsync2() { let p = new Promise((resolve, reject) => { setTimeout(() => { console.log(“链式调用2222”); resolve(“我是数据2222”); }, 2000); }); return p; }, runAsync3() { let p = new Promise((resolve, reject) => { setTimeout(() => { console.log(“链式调用3333”); resolve(“我是数据3333”); }, 1000); }); },this.runAsync1() .then((data) => { console.log(data); return this.runAsync2(); }) .then((data) => { console.log(data); return this.runAsync3(); }) .then((data) => { console.log(data, 888); });then 链式调用 解决异步的一种方案 // reject 方法使用 复制代码
runReject() { this.runAsync4() .then((data) => { console.log(“我是数字” + data); }) .catch((err) => { console.log(“我报错了” + err); }); }, runAsync4() { console.log(this.myNum); let p = new Promise((resolve, reject) => { setTimeout(() => { if (this.myNum > 5) { resolve(this.myNum); } else { reject(this.myNum); } }, 1000); }); return p; },
我们常用的axios 链式调用then 方法 实则就是 promise封装的http库 所以才能用then方法!