我转过几个弯 绕过那个小雨楼
拿着蒲扇摆着衣衫渡着紧箍咒
不问天涯不停留 喝过几壶酒
不过年少白头道义放胸口
倘若明天之后 遥看前尘剑封侯
似那天上神仙无所求
朝朝暮暮君如梦醒十分不为何理由
是真是假是惶恐是无休
路过这风雨花满楼 片刻都不停留
我本这书生进京赶考留下许多愁
你问有没有时候 我叹这天道默悠悠
能否与我一醉方休
又过了几个弯 算尽天量道莫慌
踏这田园闻这芳草香
跌跌撞撞仗剑天涯折煞不枉无笔良
是梦是幻是温柔是家乡
路过这风雨花满楼 片刻都不停留
我本这书生进京赶考留下许多愁
你问有没有时候 我叹这天道默悠悠
能否与我一醉方休
路过这风雨花满楼 片刻都不停留
我本这书生进京赶考留下许多愁
你问有没有时候 我叹这天道默悠悠
能否与我一醉方休
谁能与我一醉方休
koa框架1 基础入门之promise
promise实际是一种格式(封装格式),所有的方法按照promise的要求写,像jq的ajax方法,es6的fetch,axios这些,都是使用了promise标准。
他的原理大概如下
let p = new Promise((resolve, reject) => {
let xhr = new XMLHttpRequest();
xhr.open("GET", "xxx/api", true);
xhr.send();
xhr.onreadystatechange = function() {
if (xhr.readyState === 4) {
if (xhr.status >= 200 && xhr.status < 300 || xhr.status == 304) {
resolve(xhr.responseText);
} else {
reject(xhr);
};
};
};
});
p.then(res => {
//请求成功
console.log(res);
}, xhr => {
//请求失败
console.log(xhr);
});
我们将异步的请求放在promise对象里面,成功就调用resolve方法,传入获取到的参数,失败的话调用reject,将xhr对象传入。
也就是说回调then第一个参数使用的方法就是resolve,第二个为reject。
而且错误的回调promise还有第二种写法,也是我们常见的写法
p.then(res => {
//请求成功
console.log(res);
})
.catch(xhr => {
//请求失败
console.log(xhr);
});
通过catch捕获错误,这样也行,但是这样意思是所有的错误,都会通过这个catch捕获触发,所有的错误回调使用同一个方法。
而上面那个,是独立的,所以说略有不同,而使用catch也是对应有多个then的时候。
p.then(res => {
//第一次
console.log(res);
})
.then(res => {
//第二次
console.log(res);
})
.then(res => {
//第三次
console.log(res);
})
.then(res => {
//第四次
console.log(res);
})
.catch(xhr => {
//请求失败
console.log(xhr);
});
如果我们有多个then的时候,错误的方法没必要总是单独写,可以通过通用的一个catch来调用,省事。
all方法
promise还支持多个异步请求,就是说假如有5个异步请求,我需要他们全部都完成才能触发某个操作,那么就可以使用all方法,相反,如果有一个请求出错,就不会触发方法。
代码如下:
Promise.all([
$.ajax({
url: "xxx/api",
dataType: "json"
}),
$.ajax({
url: "xxx/api",
dataType: "json"
}),
$.ajax({
url: "xxx/api",
dataType: "json"
}),
]).then(arr => {
console.log(arr);
}, xhr => {
console.log(xhr);
});
all接收一个数组,数组里面存放着异步方法,由于是多个,所有then接收的参数,也会是一个请求返回的内容数组,其内容的数组顺序和请求方法数组顺序相同。
错误则是共用方法。
race
这个和all不同,all是必须所有的请求都要成功,而race则是只要有一个成功了,就结束了。
代码书写和all相同,只是用法不一样。
s
相对来说也用的比较少
Promise.race([]).then(res=>{},xhr=>{})
0
评论(0)