拥抱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]