对Promise逐渐认知
2020-02-24 本文已影响0人
小遁哥
一
Promise
的 then
、catch
、finally
都会返回自身Promise
的引用
console.log('then',Promise.resolve().then());
console.log('catch',Promise.resolve().catch());
console.log('finally',Promise.resolve().finally());
这一点对封装基础逻辑的
ajax
请求很有帮助
二
下面两种写法有啥区别
Promise.reject().then(
(res) => {},
(rej) => {
console.log("发生错误");
},
);
Promise.reject()
.then((res) => {})
.catch((rej) => {
console.log("发生错误");
});
Promise.prototype.catch
方法是.then(null, rejection)
或.then(undefined, rejection)
的别名,用于指定发生错误时的回调函数
虽然都会输出=>发生错误,但是第二种方法还会捕获then
里面的错误
Promise.resolve().then(
(res) => {
throw new Error("抛出异常");
},
(rej) => {
console.log("发生错误");
},
);
Promise.resolve()
.then((res) => {
throw new Error("抛出异常");
})
.catch((rej) => {
console.log("发生错误");
});
结果为:
三
axios
实现了Promise
规范
race
表示 哪个结果获得的快,就返回那个结果,不管结果本身是成功状态还是失败状态。
结合一下:
Promise.race([
axios.post("/test/test/test2"),
axios.post("/test/test/test1"),
]).then((r1) => {
console.log("res", r1);
});
我之前一直以为race
表示哪个成功用哪个,开发时候没涉及到这种场景,竟然就这么过来了...