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']]