diff --git "a/2021/11\346\234\21014\346\227\245\345\206\205\345\256\271\346\261\207\346\200\273/index.html" "b/2021/11\346\234\21014\346\227\245\345\206\205\345\256\271\346\261\207\346\200\273/index.html" index c771c39447..91f743c3fb 100644 --- "a/2021/11\346\234\21014\346\227\245\345\206\205\345\256\271\346\261\207\346\200\273/index.html" +++ "b/2021/11\346\234\21014\346\227\245\345\206\205\345\256\271\346\261\207\346\200\273/index.html" @@ -10,7 +10,7 @@ - +
📒 Promise 四种常用工具方法
Promise.all()
:接收一个 Promise
数组,如果所有 Promise
都 fulfilled
则返回结果数组,只要有一个 Promise
变为 rejected
,则返回最先 rejected 的 Promise
,通常用于并发请求;Promise.race()
:接收一个 Promise
数组,race 意思就是比谁快,返回状态最先改变的 Promise
,不管成功还是失败,通常用于请求超时处理;Promise.any()
:接收一个 Promise
数组,返回最先 fulfilled
的 Promise
,如果没有 Promise
状态转为 fulfilled
,则抛出一个 AggregateError
;Promise.allSettled()
:接收一个 Promise
数组,在所有 Promise
状态改变(fulfilled
或者 rejected
)之后返回结果数组。Promise.allSettled
适用于异步任务互相不依赖,Promise.all
适用于异步任务互相之间需要依赖其他任务的结果;📒 什么时候不能使用箭头函数
this
、arguments
、prototype
时;let obj = {
a: 1,
fn1: () => {
console.log(this)
},
fn2: function() {
console.log(this)
}
}
obj.fn1(); // Window
obj.fn2(); // {a: 1, fn1: ƒ, fn2: ƒ} ,这是 this 的隐式绑定
const f1 = obj.fn1;
const f2 = obj.fn2;
f1(); // Window
f2(); // Window ,隐式绑定取决于谁来调用,谁调用就指向谁
使用箭头函数之所以会指向 Window
是因为箭头函数等价于下面的代码:
var that = this; // 直接使用闭包缓存 this
let obj = {
a: 1,
fn1: function() {
console.log(that);
}
}
在对象方法(例如 Vue Options API)的异步回调中经常会遇到 this
丢失的情况,一般会使用闭包进行缓存:
// 使用 _this 变量进行缓存
const _this = this;
api.get("/api/xxx", function(res) {
_this.tableData = res;
})
// 除了使用闭包缓存 this ,还可以使用箭头函数
api.get("/api/xxx", (res) => {
this.tableData = res;
})
总结一下:箭头函数没有自己的
this
,没有argument
对象,没有prototype
,不能作为构造函数(用 new 调用会报错)。箭头函数会自动捕获上级词法作用域的this
,并且箭头函数的this
在声明的时候就已经确定了,不能通过call
或者apply
修改