ECMASript 8新特性

ECMASript 8新特性

async 和 await

async和 await两种语法结合可以让异步代码像同步代码一样

async函数

async函数的返回值为promise对象,
promise对象的结果由async函数执行的返回值决定

//async 函数
async function fn(){
    //返回一个字符串
    //return
    //返回的结果不是一个 Promise类型的对象,返回的结果就是成功 Promise对象
    //抛出错误,返回的结果是一个失败的 Promise
    //throw new Error('出错啦!');
    //返回的结果如果是一个Promise对象
    return new Promise((resolve,reject)=>{
        //resolve('成功的数据');
        reject("失败的错误");
    })

}
const result = fn();//如果上面return返回一个成功的Promise,此处就返回成功的promise;返回失败的promise那此处就返回一个失败的promise

//调用then方法
result.then(value => {
    console.log(value);
},reason =>{
    console.warn(reason);
})

await表达式

  • await必须写在 async函数中
  • await右侧的表达式一般为promise对象
  • await返回的是promise成功的值
  • await的promise失败了.就会抛出异常,需要通过trv...catch 捕获处理
//创建promise对象
const p = new Promise((resolve, reject) => {
    resolve("成功的值")
})
//await 要放在async 函数
async function main() {
    try {
        let result = await p;
        console.log(result);
    } catch (e) {//catch语句可以得到失败语句的结果
        console.log(e);
    }
}

利用await和async读取文件

const fs = require("fs");
function readChaYangshi() {
    return new Promise((resolve, reject) => {
        fs.readFile("./resources/插秧诗.md", (err, data) => {
            //如果失败
            if (err) reject(err);//如果成功
            resolve(data);
        })
    })
}

async function main(){
    let chayang = await readChaYangshi();

    console.log(chayang.toString());
}
main();

async与await结合发送AJAX请求

//发送AJAX请求,返回的结果是 Promise对象
function sendAJAX(url) {

    return new Promise((resolve, reject) => {
        //1.创建对象
        const x = new XMLHttpRequest();
        //2.初始化
        x.open('GET', url);
        //3.发送
        x.send();
        //4.事件绑定
        x.onreadystatechange = function () {
            if (x.readyState === 4) {
                if (x.status >= 280 && x.status < 300) {
                    //成功了
                    resolve(x.response);
                } else {
                    reject(x.status);
                }

            }
        }
    })
}

//promise then方法测式
// sendAJAX("https://api.apiopen.top/getJoke").then(value=>{
//     console.log(value);
// },reason=>{ })

async function main(){
    let result = await sendAJAX("https://api.apiopen.top/getJoke");
    console.log(result);
}

Object.values和 Object.entries

对象方法的扩展

//声明对象
const blog = {
    name: "苏槿年",
    cities: ['北京', '上海', '广州','深圳'],
    xueke: ['前端', ' Java', '大数据', '运维']
};
//获取对象所有的键
//console.log(Object.keys(blog));
//获取对象所有的值
//lconsole.log(Object.values(blog));
//entries
//console.log(Object.entries(blog));
//创建Map
// const m = new Map(Object.entries(blog));
// console.log(m.get( 'cities' ));

//对象属性的描述对象
// console.log(Object.getOwnPropertyDescriptors(blog));

const obj = Object.create(null,{
    name:{
        value:'123',
        writable:true,
        configurable:true,
        enumerable:true
    }
})
posted @ 2022-03-18 13:23  苏槿年  阅读(62)  评论(0编辑  收藏  举报