传统实现异步的操作,是使用ajax层层嵌套,串行的模式,基本都是回调函数套回调函数,有“回调地狱”的问题
此时我们需要一种优秀的代码管理模式,能够有效的管理异步编程的代码,通过代码管理的思想,让代码开发起来更便捷,维护起来也方便,可读性也强==>JS的设计模式
let p1 = new Promise(resolve => { setTimeout(() => { resolve(‘OK‘); console.log(1); //->(1) //再次说明,不论是否基于THEN注入了方法,执行resolve/reject的时候“修改状态和值”是同步的「立即处理」, //但是“通知对应注入方法执行”的这个任务就是异步操作的「不会立即处理,只是把它排到等待任务队列中, //当其它事情处理完,再次返回头,通知对应注入的方法执行」 }, 1000); }); p1.then(result => { console.log(2); //->(2) });
注意:不管哪个方法执行,只要执行不报错,新实例的状态就是fulfilled,报错就是rejected
但是如果返回的本身是一个promise实例,则此实例最后的成功或者失败,直接决定.then返回实例的成功和失败「得到的结果也都是一样的」;
//创建一个状态为成功的promise实例
let p1 = new Promise(resolve => {
resolve(‘OK‘);
});
//创建promise实例
let p1 = new Promise((resolve, reject) => { reject(‘NO‘); });
//创建.then返回的新实例 let p2 = p1.then(result => { console.log(‘成功->‘, result); return 10; }, reason => { console.log(‘失败->‘, reason); //->失败 ‘NO‘ return 20; }); p2.then(result => { console.log(‘成功->‘, result); //->成功 20 }, reason => { console.log(‘失败->‘, reason); });
//--------------------------------------------
let p1 = Promise.resolve(‘OK‘);
let p2 = p1.then(result => {
console.log(‘成功->‘, result); //->成功 ‘OK‘
return Promise.reject(‘NO‘); //返回的promise实例的状态和结果就是最后p2的状态和结果
}, reason => {
console.log(‘失败->‘, reason);
return 20;
});
p2.then(result => {
console.log(‘成功->‘, result);
}, reason => {
console.log(‘失败->‘, reason); //->失败 ‘NO‘
});
原文:https://www.cnblogs.com/jollyJp/p/14067386.html