利用数组解构来实现值的互换
let a = 'test1', b = 'text2'
[a, b] = [b, a]
console.log(a) // text2
console.log(b) // test1
set快速去重
let arr = [1, 1, 2, 2, 3, 3];
let deduped = [...new Set(arr)] // [1, 2, 3]
Promise基本用法
const promise = new Promise(function(resolve, reject) {
// ... some code
if (/* 异步操作成功 */){
resolve(value);
} else {
reject(error);
}
});
Promise构造函数接受一个函数作为参数,该函数的两个参数分别是resolve和reject。它们是两个函数,由 JavaScript 引擎提供,不用自己部署。
链式写法避免response串联带来数据重复
getJSON("/posts.json").then(function(json) {
return json.post;
}).then(function(post) {
// ...
});
promise
.then(result => {···}) // Promise 成功执行
.catch(error => {···}) //Promise 抛出异常
.finally(() => {···}); // 不管 Promise 对象最后状态如何,都会执行的操作
上面代码中,promise抛出一个错误,就被catch方法指定的回调函数捕获
Promise.all()
// 生成一个Promise对象的数组
const promises = [2, 3, 5, 7, 11, 13].map(function (id) {
return getJSON('/post/' + id + ".json");
});
Promise.all(promises).then(function (posts) {
// ...
}).catch(function(reason){
// ...
});
上面代码中,promises是包含 6 个 Promise 实例的数组,只有这 6 个实例的状态都变成fulfilled,或者其中有一个变为rejected,才会调用Promise.all方法后面的回调函数。
Promise.allSettled()
const promises = [
fetch('/api-1'),
fetch('/api-2'),
fetch('/api-3'),
];
await Promise.allSettled(promises);
removeLoadingIndicator();
上面代码对服务器发出三个请求,等到三个请求都结束,不管请求成功还是失败,加载的滚动图标就会消失。