async函数和await表达式
async无论返回什么类型的数据都是返回promise对象,除了返回promise对象,则其返回的对象的状态根据子对象的返回状态决定
async function fn(){
// return 'zy'; //Promise {<fulfilled>: 'zy'}
//return ;//Promise {<fulfilled>: undefined}
return new Promise((resolve,reject)=>{
// resolve("succeed"); //[[PromiseState]]: "fulfilled" [[PromiseResult]]: "succeed"
reject('failed'); //async.html:1 Uncaught (in promise) failed
})
}
const result=fn();
console.log(result);
- await表达式必须写在async函数中
- await右侧表达式一般为promise对象
- 返回的是promise成功的值
- await的promise失败了,会抛出异常
const p=new Promise((resolve,reject)=>{
resolve('成功找到工作啦!');
})
async function fn(){
let result=await p;
console.log(result); //成功找到工作啦!
}
fn();
const p=new Promise((resolve,reject)=>{
reject('找不到工作了呜呜呜!');
})
async function fn(){
//catch(e)中e表示失败的结果
try{
let result=await p;
console.log(result);
}catch(e){
console.log(e);//找不到工作了呜呜呜!
}
}
fn();
对象方法扩展
- Object.values和Object.entries
- Object.getOwnPropertyDescriptors()
let obj={
name:"zyzy",
age:21,
school:"HQU",
subject:"computer"
}
//包含属性名
console.log(Object.keys(obj));//['name', 'age', 'school', 'subject']
// 返回一个数组,包含属性值
console.log(Object.values(obj));//(4) ['zyzy', 21, 'HQU', 'computer']
// 得到一个数组,数组的中的值又是一个数组 [key,value]
console.log(Object.entries(obj));//[Array(2), Array(2), Array(2), Array(2)]
// 创建Map
const m=new Map(Object.entries(obj))
console.log(m.get('school'));
// 对象属性的描述
console.log(Object.getOwnPropertyDescriptors(obj));