温习日志
——2023年2月26日下午
学习内容
- The Event Loop in Practice
- 在JS引擎中,会首先执行调用栈中的代码
- 对于回调函数会存入回调队列中,在调用栈中的代码全部执行完毕,Event Loop会开始执行回调队列中的代码
- 对于
Promise
会存入特殊的微任务队列中,会优先与回调队列开始调用 - 通过这些规定JS实现单线程的非阻塞异步调用
- Building a Simple Promise
- 通过
new Promise
创建Promise
对象 Promise
接受一个函数作为参数,这个函数有两个函数作为参数,分别是resolve
和reject
- 可以通过
Promise.resolve()
或者Promise.reject()
直接实现成功或失败,会返回Promise
对象,可以进行链式写法
- 通过
- Promisifying the Geolocation API
navigator.geolocation.getCurrentPosition()
接受两个函数,一个成功的回调函数、一个失败的回调函数- 在
Promise
对象中,对于navigator.geolocation.getCurrentPosition()
的两个函数可以直接使用resolve
和reject
- 练习2,详见于代码中
- Consuming Promises with Async_Await
- 对于
Promise
的then
方法,也可以用await
方法而实现在获取到数据后处理数据 await
必须在函数中,且函数前缀要添加async
的前缀才能使用
- 对于
- Error Handling with try...catch
- 对于
await
关键字,不会进行catch
捕获 - 可以将获取的代码写入
try {} catch(err) {}
中,在错误时进行处理
- 对于
- Promise 方法
Promise.all()
方法接受一个数组作为参数,其中都是请求,会将所有的数据请求成功后返回处理后的数组,但是如果其中一个出现错误就会报错Promise.race()
方法接受一个数组作为参数,其中都是请求,会在第一个处理完直接返回结果Promise.allSettled()
方法接受一个数组作为参数,其中都是请求,会将所有的数据请求成功后返回处理后的数组,如果其中出现错误也不会影响Promise.any()
方法接受一个数组作为参数,其中都是请求,会在第一个处理完直接返回结果,即使是第一个是失败的,也会返回
- 练习3,详见于代码中