ES9新特性(2018)

225 阅读1分钟
for await...of

用于遍历异步可迭代对象 ,for await...of 不适用于不是异步可迭代的异步迭代器。

普通for...of

function getPromise(time) { 
  return new Promise((resolve, reject) => {
    setTimeout(() => {
        resolve(time) 
     }, time) 
    })
}
let arr=[getPromise(100),getPromise(200),getPromise(300)]

for(const i of arr){
    console.log(i)
}
// Promise{<pending>}
// Promise{<pending>}
// Promise{<pending>}

在上述遍历的过程中可以看到三个任务是同步启动的,我们期望的是一个异步任务执行完,在执行下一个异步任务,然而从输出可以看出不是按任务的执行顺序输出的,这显然不太符合我们的要求

for…await…of

function getPromise(time) { 
  return new Promise((resolve, reject) => {
    setTimeout(() => {
        resolve(time) 
     }, time) 
    })
}
let arr=[getPromise(100),getPromise(200),getPromise(300)]

for await (const i of arr){
    console.log(i)
}
//100
//200
//300
Promise.prototype.finally()

不管这个promise代码抛出异常还是正确 都会去执行

    new Promise((resolve,reject)=>{
        resolve(1)
    }).then(res=>{
        console.log(res,'success')
    }).catch(err=>{
        console.log(err,'error')
    }).finally(()=>{
        console.log('finally')
    })
    
    //1success
    //finally

    new Promise((resolve,reject)=>{
        reject(1)
    }).then(res=>{
        console.log(res,'success')
    }).catch(err=>{
        console.log(err,'error')
    }).finally(()=>{
        console.log('finally')
    })
    
    //1error
    //finally
带标签的模板字符串扩展

es9 新特性中移除了对 ECMAScript带标签的模板字符串中转义序列的语法限制。 遇到不合法的字符串转义返回undefined,并且从raw上可获取原字符串

function test(str){
    console.log(str)
}
test(123)
//123
test`123`
//['123',raw:['123']]
test`\u123`
//[undefined,raw:['\u123']]