葫芦岛市建设局网站上海市发布
葫芦岛市建设局网站,上海市发布,2018年做网站赚钱,企业管理培训机构目录 PromisePromise基本使用Promise可进行连续回调Promise回调可接受入参1.工作原理 async/await总结参考文档#xff1a; 异步 let a 0setTimeout(() {a 1}, 1000)console.log(a) // 0此时这个延迟就成为异步执行的了#xff0c;a值还没有变1就被使用输出#xff0… 目录 PromisePromise基本使用Promise可进行连续回调Promise回调可接受入参1.工作原理 async/await总结参考文档 异步 let a 0setTimeout(() {a 1}, 1000)console.log(a) // 0此时这个延迟就成为异步执行的了a值还没有变1就被使用输出我们只能得到0。
Promise
有时候我们不得不进行异步操作比如从后台请求数据我们需要时间等待它得到数据后再使用。
Promise基本使用
new Promise()内接收一个函数入参为resolve, reject
Promise内的函数将可以执行任意时长执行到调用resolve()或reject()我们此处把它放在延迟1s后执行此时a已经被赋值为1因此就可以得到被赋值后的a。
**resolve()**进入.then也就是执行成功回调**reject()**进入.catch也就是手动执行错误进入捕获异常reject()用的较少。
let a 0new Promise((resolve, reject) {setTimeout(() {a 1resolve()}, 1000)}).then(() {console.log(a) //1}).catch(() {}
)Promise可进行连续回调 第一种方式回调函数中接受返回一个新的Promise进行下一步回调。 第二种方式Promise.resolve(res)在res为普通数据时等同于new Promise并且resolve(res) 第三种也是最常用的再异步回调中直接返回普通数据也可当作接受了一个新的Promise进行下一步回调
let a 0new Promise((resolve, reject) {setTimeout(() {a 1resolve(a)}, 1000)}).then((res) {return new Promise((resolve, reject) {resolve(res)})//等同于//return Promise.resolve(res)//等同于//return res}).then((res) {console.log(res) //1}).catch(() {})
Promise回调可接受入参
.then中的回调函数可以存在入参入参为**resolve()**手动传入此处res便是传入的a值。.catch与reject()的关系与上面两者同理只不过变成了手动捕捉错误时的回调。 let a 0new Promise((resolve, reject) {setTimeout(() {a 1resolve(a)}, 1000)}).then((res) {console.log(res) //1}).catch(() {})Promise.all(promises) 能够一次并行处理多个 promise并且只返回一个 promise 实例 那个输入的所有 promise 的 resolve 回调的结果是一个数组。
1.工作原理
Promise.all() 是一个内置的辅助函数接受一组 promise或者一个可迭代的对象并返回一个promise ini复制代码const allPromise Promise.all([promise1, promise2, …]);
可以使用 then 方法提取第一个 promise 的值
allPromise.then((values) {values; // [valueOfPromise1, valueOfPromise2, ...]
});也可以使用 async/await 语法
const values await allPromise;
console.log(values); // [valueOfPromise1, valueOfPromise2, ...]Promise.all() 返回的 promise 被解析或拒绝的方式。 如果 allPromise 都被成功解析那么 allPromise 将使用一个包含各个 promise 已执行完成后的值的数组作为结果。数组中 promise 的顺序是很重要的——将按照这个顺序得到已实现的值。 但是如果至少有一个 promise 被 rejected 那么 allPromise 会以同样的原因立即 rejected 不等待其他 promise 的执行。
如果所有的 promise 被 rejected 等待所有的promise 执行完成但只会返回最先被rejected 的promise 的 reject 原因。 具体使用可以参考 https://juejin.cn/post/7003713678419705870
Promise.all() 的这种行为被称为快速失败如果 promise 数组中至少有一个 promise 被 rejected 那么返回的 promise 也被拒绝。如果promise 数组中所有的都被 rejected 那么返回的promise 被拒绝的原因是先rejected的那一个。
Promise.all() 是并行执行异步操作并获取所有 resolve 值的最佳方法非常适合需要同时获取异步操作结果来进行下一步运算的场合
async/await
Promise是用来解决回调地域问题因此es7出现了async/await是Promise的语法糖等同于Promise的链式调用 Exception处理。
async/await有一个限制就是必须在函数中使用因此我们将代码包进一个函数并在函数前加上async这样我们便可以在函数中使用await关键字。
const test async () {let a 0...}test()
await用在哪里呢用在.then回调前的Promise
await后面跟着Promise而它的返回值便是回调时resolve()传来的值代替了回调函数看起来代码一下子就清晰很多了。
const test async () {let a 0const res await new Promise((resolve, reject) {setTimeout(() {a 1resolve(a)}, 1000)})console.log(res) //1}test()总结 Promise 是一种更底层的异步编程模型而 async/await 则是基于 Promise 的语法糖使异步代码更加清晰易读。 在实际使用中async/await 更容易理解和维护但它们本质上仍然依赖于 Promise。
参考文档
https://juejin.cn/post/7078882164032421924https://juejin.cn/post/7003713678419705870
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/90253.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!