Open kongmingLatern opened 1 year ago
作用:
generator.return('next1')
generator.throw(new Error('error msg'))
作用:
function* foo() {
console.log('函数开始执行')
try {
yield "why"
} catch(err) {
console.log('内部错误', err)
}
yield 222
console.log('函数结束执行')
}
yield*
obj(可迭代对象)
数组
const arr = ["asd", "asbdf", "asgfdg"]
function* createArrayObject(arr) {
yield* arr
}
const nameIterator = createArrayObject(arr)
console.log(nameIterator.next())
console.log(nameIterator.next())
console.log(nameIterator.next())
类
class Person {
constructor(name, age, height, friends) {
this.name = name
this.age = age
this.height = height
this.friends = friends
}
*[Symbol.iterator]() {
*yield this.friends
}
}
const p = new Person('syj', 19, 190, ["ckh", "wjl", "fzh", "wl", "wdq"])
for(const item of p) {
console.log(p) // ckh wjl fzh wl wdq
}
const pIterator = p[Symbol.iterator]()
console.log(pIterator.next())
console.log(pIterator.next())
console.log(pIterator.next())
console.log(pIterator.next())
console.log(pIterator.next())
function exeGenFn(genFn) {
const generator = genFn()
function exec(res) {
const result = generator.next()
if(result.donw) return
result.value.then(res => {
exec(res)
})
}
exec()
}
exeGenFn(getData)
事件循环中并非只维护着一个队列,事实上是有两个队列:
在每次执行宏任务前,都要保证微任务里的内容清空
console.log('script start')
function requestData(url) {
return new Promise((resolve) => {
setTimeout(() => {
console.log('setTimeout')
resolve(url)
}, 2000)
})
}
function getData() {
console.log('getData start')
requestData("why").then(res => {
console.log('then1-res': res)
})
console.log('getData end')
}
getData()
console.log('script end')
结果:
script start
getData start
getData end
script end
setTimeout
then1-res: why
async function async1() {
console.log('async1 start')
await async2()
console.log('async1 end')
}
async function async2() {
console.log('async2')
}
console.log('script start')
setTimeout(() => {
console.log('setTimeout')
}, 0)
async1()
new Promise(function (resolve) {
console.log('promise1')
resolve()
}).then(function() {
console.log('promise2')
})
console.log('script end')
答案:
script start
async1 start
async2
promise1
script end
async1 end
promise2
setTimeout
2023-01-20
1. 你学习了哪些知识?
2. 学习过程中是否有存在的问题?
关于如何写每日任务:
如何写每日任务