Promise、async await异步相关记录

72 阅读1分钟

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 }

image.png