proxy

 let obj = {
     name: 'tom',
 }
    
 // 使用 proxy 监听 obj 的变化
 proxy = new Proxy(obj, {
     get(target, key) {
         console.log(`get ${key}`)
         if (key === 'name') {
             a.innerHTML = target[key]
         }
         return target[key]
     },
     set(target, key, value) {
         console.log(`set ${key} = ${value}`)
         if (key === 'name') {
             a.innerHTML = value
         }
         target[key] = value
         return true
     }
 })
proxy.name
// get name

Reflect配合proxy

let obj = {}
let proxy = new Proxy(obj, {
    get(target, key) {
        console.log(`get ${Reflect.get(target, key)}`)
        // return Reflect.get(target, key)
        return Reflect.get(...arguments)
    },
    set(target, key, value) {
        console.log(`set ${key} = ${value}`)
        Reflect.set(...arguments)
        return true
    }
})

promise相关api

一个 Promise 必然处于以下几种状态之一:

​ 1.待定(pending):初始状态,既没有被兑现,也没有被拒绝。

​ 2.已兑现(fulfilled):意味着操作成功完成。

​ 3.已拒绝(rejected):意味着操作失败。

ajax函数

function ajax(str, time, isSuccess) {
    if (isSuccess){
        return new Promise((resolve, reject) => {
            setTimeout(() => {
                resolve(str);
            }, time);
        });
    }else{
        return new Promise((resolve, reject) => {
            setTimeout(() => {
                reject(str);
            }, time);
        });
    }
}

Promise.all()

等待所有 Promise, 在任意一个 Promise 被拒绝时拒绝

 Promise.all([ajax('1',1000, true), ajax('2',2000, true)]).then((res) => {
     console.log(res)
 }).catch((err) => {
     console.log(err)
 })
// ['1', '2']

Promise.race()

看哪一个 Promise 先被执行完,就执行哪一个 Promise

Promise.race([ajax('1',1000, true), ajax('2',2000, true)]).then((res) => {
    console.log(res)
}).catch((err) => {
    console.log(err)
})
// 1

Promise.any()

当输入的任何 promise 实现时,此返回的 promise 将实现,并具有第一个 fulfillation 值。当所有输入的 promise 都拒绝时(包括传递空可迭代对象时),它会拒绝

Promise.any([ajax('1',1000, false), ajax('2',2000, true)]).then((res) => {
    console.log(res)
}).catch((err) => {
    console.log(err, '拒绝')
})
// 2

Promise.allSettled()

无论任何 promise 实现,此返回的 promise 都将实现,并具有一个数组,其中包含每个输入 promise 的状态和值。

Promise.allSettled([ajax('1',1000, false), ajax('2',2000, false)]).then((res) => {
    console.log(res)
}).catch((err) => {
    console.log(err)
})
/*
[{…}, {…}]
0: {status: 'rejected', reason: '1'}
1: {status: 'rejected', reason: '2'}
*/