Promise
Promise.then的第二个参数和catch的区别
区别在于如果在Promise.then里抛出错误,第二个参数是捕获不到的,而后面的catch可以捕获到,因为then的第二个参数是处理上一层状态为失败的。
async await
7张图,20分钟就能搞定的async/await原理!为什么要拖那么久? - 掘金 (juejin.cn)
await作用
await规定async函数中异步任务只能一个一个排队执行,从而达到同步方式执行异步操作的效果
async函数
async函数返回一个fullfilled状态的promise,其值为async函数的返回值。
generator 和 yield
generator配合yield使用可以达到暂停的效果,使用next可以使函数继续往下执行,yield后面接函数, 则当函数到这个暂停点时会立即执行后面的函数,并且该函数的执行返回值会当做该暂停点对象的value,比如下面的例子
function fn(num) {
console.log(num);
return num
}
function* gen() {
yield fn(1)
yield fn(2)
return 3
}
const g = gen()
console.log(g.next()); //1 {value: 1, done: false}
console.log(g.next());// 2 {value: 2, done: false}
console.log(g.next());// {value: 3, done: true}
而如果后面接一个返回promise对象的函数的话,则会返回pending状态的promise对象
next参数也可以进行传参,用yield进行接收,这就使得可以通过next传参来制定yield后面执行函数的参数,不过注意是要先右边yield,在next传参,在左边接收,具体参考下面例子
function* gen() {
const num1 = yield 1
console.log(num1)
const num2 = yield 2
console.log(num2)
return 3
}
const g = gen()
console.log(g.next()) // { value: 1, done: false }
console.log(g.next(11111))
// 11111
// { value: 2, done: false }
console.log(g.next(22222))
// 22222
// { value: 3, done: true }