Promise是一种异步编程的解决方案。
settimeout模拟请求
//要传入两个参数 resolve 解决的意思 reject 拒绝的意思
//在函数里面需要传入这两个参数。而 resolve reject 本身也是两个函数。
new Promise((resolve,reject)=>{
setTimeOut((data)=>{
//成功的时候在这里做代码处理 也就是在then里做处理
// resolve(data) //使用resolve的时候以函数的方式 然后在当前整个Promise中添加then函数 (下一步)
//失败的时候调用 reject(‘错误信息’)
},1000)
}).then((data)=>{
//处理请求
}).catch((err)=>{//catch 捕获
console.log(err);//专门在这里处理err的信息
})
//Promise 就是在你需要处理一些网络请求的时候,将代码有一个分离。也就是本应该在上面调用resolve函数的位置处理逻辑的,现在把它抽离到then函数中处理。
Promise的另一种写法:
new Promise((resolve,reject)=>{
setTimeOut(()=>{
resolve('这是正常的处理进来了')
reject('这是报错了啥的进来了')
})
}).then(res=>{
console.log(res);//调用resolve的时候会处理这里
},err=>{
console.log(err);//调用reject的时候会处理这里
})
Promise的链式调用 第一种简写方式
new Promise((resolve,reject)=>{
setTimeOut(()=>{
resolve('aaa');
},1000)
}).then((res)=>{
console.log(res + '第一次处理');
return Promise.resolve(res+'111');
}).then((res)=>{
console.log(res + '第二次处理');
return Promise.resolve(res+'222');
}).then((res)=>{
console.log(res + '第san次处理');
})
以上代码可以继续简写 内部会对return后面的进行promise封装
new Promise((resolve,reject)=>{
setTimeOut(()=>{
resolve('aaa');
},1000)
}).then((res)=>{
console.log(res + '第一次处理');
return res+'111';
}).then((res)=>{
console.log(res + '第二次处理');
return res+'222';
}).then((res)=>{
console.log(res + '第san次处理');
})
以上都是调用的resolve,也就是都成功的时候。如果在过程中遇到有reject调用不成功的情况应该这样写:
new Promise((resolve,reject)=>{
setTimeOut(()=>{
resolve('aaa');
},1000)
}).then((res)=>{
console.log(res + '第一次处理');
return Promise.reject('err');//两种方式 :throw '错误信息' 抛出异常也是可以的
}).then((res)=>{
console.log(res + '第二次处理');
return Promise.resolve(res+'222');
}).then((res)=>{
console.log(res + '第san次处理');
}).catch(err=>{
console.log(err);
})
Promise的All使用
Promise.all([
new Promise((resolve,reject)=>{
setTimeOut(()=>{
resolve('这是值')
},1000)
}),
new Promise((resolve,reject)=>{
setTimeOut(()=>{
resolve({re:'11',age:18})
},1000)
})
]).then(res=>{
console.log(res);//这里获取到上面两个resolve请求拿到的值
})
今天的学习就到这里了。