拥抱ES6(四)


promise补充


除了最原始的then调用,promise还支持all和race调用。



  • promise.all将所有请求的数据存放在数组内,
  • promise.race方法会获取最先读取完的数据,此时获取的数据不再是数组形式。

const fs = require('fs')
const readFilePromise = fileName=> {
return new Promise((resolve, reject) => {
fs.readFile(fileName, (err, data) => {
if (err) {
reject(err)
}else{
resolve(data.toString())
}

})
})
}

const p1 = readFilePromise('./1.json')
const p2 = readFilePromise('./2.json')

Promise.all([p1, p2]).then((results) => {
console.log(results)//数组
})

Promise.race([p1, p2]).then((data) => {
console.log(data)//注意 此时data为p1,p2中最先读取完的数据
})

对象默认属性


有时候我们需要给对象设置默认属性,通过使用…运算符可以更优雅的实现


function getDefaultProp(obj) {

const defaultProps = {
name: "tom",
age: 18
}
obj = {
...defaultProps,
...obj
}
return obj;
}

var obj = {
age: 20,
name: "jack"

}

console.log(getDefaultProp())//{ name: 'tom', age: 18 }
console.log(getDefaultProp(obj))//{ name: 'jack', age: 20 }

函数默认参数


es6中允许函数设置默认参数,甚至可以设置强制参数,更方便开发


强制参数

var required = () => {throw new Error('缺少参数')};
var add = (a = required(), b = required()) => a + b;
console.log(add(1, 2)) //3
console.log(add(1))//报错 缺少参数

默认参数

var defaultAdd= (a = 1, b = 2) => a + b;
console.log(defaultAdd())//3

使用Set去重数组

var arr = [10, 2, 45, 100,10,10,2,45,100,100];
function arr_no_repeat(arr) {
return [...new Set(arr)];
}
console.log(arr_no_repeat(arr)) //[10, 2, 45, 100]