异步函数
let index = 0;
function delay(time,fn){
return new Promise((resolve,reject)=>{
setTimeout(()=>{
fn();
resolve(`执行的第${++index}次`);
},time);
});
}
返回一个promise对象
promise的回调函数 中resolve()的参数:
1 没有使用then时, 参数是整个promise的返回值,需要定义变量来接收,再使用
2 使用then时, 参数是then中处理执行成功方法的实参,需要定义形参接收,再使用
async function ff(){
let val1 = await delay(1000,function(){
console.log(1);
});
console.log(val1);
let val2 = await delay(1000,function(){
console.log(2);
});
console.log(val2);
let val3 = await delay(1000,function(){
console.log(3);
});
console.log(val3);
}
ff();
for-of循环
let arr = [“a”,“b”,“c”,“d”,“e”];
let obj = {
a : 1,
b : 2,
c : 3
}
for…in 通过 key-value的形式来遍历数据
// for(let val in arr){
// console.log(val);
// console.log(arr[val]);
// }
// for(let val in obj){
// console.log(val);
// };
for…of 直接读取数据
for(let val of arr){
console.log(val);
// console.log(arr[val]);
}
console.log(arr);
console.log(obj);
for(let val of obj){
console.log(val);
}
迭代协议
let obj = {
a : 1,
b: 2,
c: 3
}
// console.log(Object.keys(obj));
obj[Symbol.iterator] = function(){
// 迭代协议
let values = Object.values(obj);
let index = 0;
return {
**next(){ // 这里不是自定义的名称**
if(index >= values.length){
return {
// value: "1", // 循环过程中的值
done: true // 代表循环是否完成
}
}else{
return{
done :false,
value: values[index++]
}
}
}
}
}
let va = obj[Symbol.iterator]();
console.log(va.next());
console.log(va.next());
console.log(va.next());
console.log(va.next());
console.log(va.next());
for(let val of obj){
console.log(val);
}