Promise
首先知道他的意义,
前端有一个东西叫做:回调地狱
其实就像咱们的jQuery当中
你想用A的东西,必须在A的里面才能用!
外面的同级根本拿不到A的里面值
而Promise就是为了让同级也能拿到里面而诞生的
同步:说白了就算是做完这步下一步!比如食堂打饭,只有第一个把饭拿走,后面的人才可以下一个领饭
异步:异步非阻塞,阻塞就相当于去买火车票没带身份证.此时这个人让出来你们先,等会我拿到身份证再插进去
new Promise里面放函数,函数里面显示两个值,一个是成功一个是失败!里面的name放到你的成功里!然后找then就是你的值了
var ks = new Promise((resolve, reject)=>{
setTimeout(()=>{
var name = 'Aaron'
resolve(name)
reject('失败的一句话')
}, 1000)
})
p.then((data)=>{
console.log(data)
}).catch(err=>{
console.log(err)
})
在深入一些,如果是数据的话怎么显示出来
var ks = new Promise((resolve, reject)=>{
$.ajax({
type:"get",
url:"www.xxoo.cn/xxx?id=123456",
success:function(res)
{
resolve(res)
}
})
})
p.then((data)=>{
console.log(data)
})
Promise.all这个更方便,可以放多个用all包起来!但是如果有一个失败就会返回一个失败信息
var a = new Promise((a, b) => {
a('成功1')
})
var b = new Promise((a, b) => {
a('成功2')
})
var c = Promise.reject('失败货色')
Promise.all([a, b, c]).then(res => {
console.log(res)
}).catch(err => {
console.log(err)
})
Promise.race跟楼上有点相似,只不过这个是赛跑型的!谁加载完的最快!我就先显示谁比如1234!3是最快的,所以显示的时候顺序是3214。
而all是拿到所有1234再一起显示
var a = new Promise((a, b) => {
a('成功1')
})
var b = new Promise((a, b) => {
a('成功2')
})
Promise.race([a, b, c]).then(res => {
console.log(res)
}).catch(err => {
console.log(err)
})
async和await
其实跟promise有着缠缠绵绵的效果如果没有async就直接返回一句话“呵呵”
function fx()
{
return '呵呵'
}
console.log(fx())
但是有了他仿佛是获得数据一样变成promise出现
async function fx()
{
return '呵呵'
}
console.log(fx())
而awair是什么呢?其实他是阻塞!你拉屎的时候:如果卡住开头后面的也拉不出来!
他就相当于第一个async(大脑)获取出一个通知(你该拉屎了)
此时在另一个async(大肠)说好的,我要拉出来了
但是如果async(大脑)说我还没有做好心理准备
那个async(大肠)就会忍着不拉,弄得后面的憋着喘不过气
但是非阻塞!厕所是公用的,这个人愿意等就等,你将会被跳过!下一个async将会正常运行
async function nao()
{
return new Promise((resolve, reject)=>{
setTimeout(()=>{
resolve('等999999再拉')
}, 999999)
})
}
async function chang()
{
var a = await nao()
console.log(a)
console.log('忍着才能拉出去')
}
还有一种失败的方法之前的是p.then().catch()
而在这里是try{}catch(err){}
而且只要这里错误,后面的123456就不会被显示
async function nao()
{
return Promise.reject('失败者')
}
async function chang()
{
try{
var a = await nao()
console.log(a)
}catch(err)
{
console.log(err)
}
console.log(123456)
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。