promise
promise对象是一个保存还未发生事件的结果的一个容器
对promise进行拆解
- promise对象本质是一个构造函数
通过new得到实例
const promsie = new Promise();
- promise接收一个函数作为参数
const promsie = new Promise(function() {});
- 该函数接收两个参数,resolve和reject
const promsie = new Promise(function(resolve,reject) {});
- resolve是成功时调用,并将操作的结果传递出去,reject是失败的调用,并将操作的结果传递出去
const promsie = new Promise(function(resolve,reject) {
if (true) {
resolve('ok')
} else {
reject('no');
}
});
- Promise 实例生成以后,可以用 then 方法分别指定 resolved 状态和 rejected 状态的回调函数。then 方法可以接受两个回调函数作为参数。第一个成功,第二个失败(可省略)
promise.then(function(res) {
console.log(res) // ok
},function(err) {
console.log(err) // no
})
- 方法
all()(并行发送(一起发送请求))
p1,p2,p3 Promise对象 - 全部成功,返回p1,p2,p3返回的结果的数组
- 只要有一个失败,则返回第一个被reject的值
Promise.all([p1,p2,p3]).then([a1,a2,a3] => {
})
race(),返回最快的请求结果,用法和all()相同
await
await等待一个promise对象(也可以是其他类型,但其他类型意义不大),他只能在异步函数async内部执行,
await是阻塞一个异步任务,await后面的代码都相当于微任务
返回值:是promise resolve之后的结果
await fn() //同步
fn1() //微任务
fn2() //微任务
鸡肋的symbol
原始数据类型Symbol,独一无二的值
let s1 = Symbol();
let s2 = Symbol();
if (s1 === s2) //false
let s1 = Symbol('abc');
let s2 = Symbol('abc');
if (s1 === s2) //false
let s1 = Symbol.for('abc');
let s2 = Symbol.for('abc'); //for相当于登记标志
if (s1 === s2) //true
var id = Symbol();
var obj = {
id: 'abc',
[id]: 'hello'
}
var id = Symbol('abc');//abc只是对Symbol进行描述,无实际意义
obj.id //abc
obj[‘id’] //abc
obj[id] //hello
以symbol定义的键,不能通过点访问,也不能通过循环,或者Object.keys(obj) 拿到键值(!!!真是太没用了)