ES6中Promise、Async/await解决回调地狱、Proxy代理

这篇具有很好参考价值的文章主要介绍了ES6中Promise、Async/await解决回调地狱、Proxy代理。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.Promise

作为一些场景必须要使用的一个对象,比如说我们要发送一个请求,但是在发送这个请求之前我们需要以另一个请求返回的结果中的一个数据作为这次请求的参数,也就是说这个请求必须在另一个请求后面,当然我们用setTimeout定时器写一个延时函数也可以,但是当有很多请求的时候回造成一层套一层形成回调地狱。
直接上代码,代码里面注释写的很清楚

<script>
    // 注:下面的.then的err是因为then()有两个参数
    // then((res)=>{},(err)=>{})两个参数都是函数一个是Promise成功的一个是失败的
    const pr = new Promise(function (resolve, reject) {//这个地方一般用箭头函数
        resolve('第一次成功') //成功的时候会给.then一个结果数据
        //reject('失败的信息') //失败的时候会给.catch一个结果数据
    }).then(res => {
        console.log('拿到第一次成功的结果:' + res) //这里的res就是 成功
        //我们拿到第一层成功的结果可以继续在里面执行下一步操作
        return new Promise((resolve, reject) => {
            resolve('第二次成功')
            //这个地方我们又拿到成功的需要再去.then拿到这次成功的结果
        })
    }, err => {
        //我们可能每一次失败都要进行不同的处理,就可以给每一个.then加上错误处理
        console.log('第一次失败' + err)
        throw new Error('报错') //报错了下面的代码就不执行了
    }).then(res => {
        console.log('第二次成功拿到结果:' + res)
    }, err => {
        console.log('第二次失败' + err)
    }).catch(err => {
        console.log(err) //这里的err 就是是失败
    })
    //pending 等待状态
</script>

2.Async/await

这个是基于Promise进行优化的,因为Promise虽然解决了回调地狱但是其是链式调用,会写起来很长也不是很方便后期维护,Async/await就是Promise的升级版。

<script>
    //Async/await
    //步骤1:准备一个返回promise对象的函数
    function asyncTask(){
        return new Promise((resolve,reject)=>{
            let isSuccess=true
            if(isSuccess){
                resolve('任务3的成功处理结果')
            }else{
                reject('任务3的失败处理结果')
            }
        })
    }
    async function main(){
        console.log('任务1')
        const pr1=await asyncTask()
        //这里只等待了一个如果还有继续写
        //const pr2=await asyncTask2()
        console.log(pr1);
        console.log('任务2');
    }
    main()
</script>

3.Proxy对象代理

这个就是表面意思,使用一个对象去代替另一个对象进行一些操作,主要用于框架的封装比如VUE3,vue2中用的就是Object.defineProperty()也是数据渲染的底层。
举例说吧,我们有一个数据存储在对象中,我们想把这个数据渲染到页面很简单,但是我们需要做到当修改数据的时候页面中显示也跟着改变,听起来是不是很熟悉没错就是vue中的双向绑定数据的原理。

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <div id="container"></div>
</body>
<script>
    //编写一个对象,把对象的属性显示到页面上,再进行对对象的属性修改时页面跟随变化
    const obj = {
        name: '一号',
        age: 18
    }
    const container = document.getElementById('container');
    // console.log(container);
    // textContent和innerHTML类似
    //我们现在对obj.name修改发现修改后页面并不变化需要从新渲染
    //obj.name = '二号'; //虽然数据变了,但是页面没有变化需要从新渲染
    //container.textContent=obj.name; //从新渲染才可以
    //第二种 使用代理Proxy
    //我们使用代理就可以解决这个问题
    //两个参数 第一个 代理的哪一个对象,第二个一个对象包含函数
    const p1 = new Proxy(obj, {
        get(target, property, receiver) {
            // 数据对象 属性名   Proxy实例
            //获取的时候
            //obj[property] 就是获取对象中的所有属性
            return obj[property]
        },
        set(target, property, value, receiver) {
            // 数据对象 属性名  修改的值 Proxy实例
            //修改的时候
            obj[property] = value
            container.textContent = obj.name;
        }
    })
    console.log(p1.name);
    p1.name='三号'
</script>

</html>

上面的代码就是举得例子,以前自己也不懂双向数据的原理(只会背八股文不知道底层怎么实现的),现在看到proxy恍然大悟。

总结

代码千千万,适合自己最重要。欢迎大家评论指出错误和不足。文章来源地址https://www.toymoban.com/news/detail-521414.html

到了这里,关于ES6中Promise、Async/await解决回调地狱、Proxy代理的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • ES6-2:Iterator、Proxy、Promise、生成器函数...

    打印出的是里面的内容,如果是for in打印出来的是索引,of不能遍历对象 Symbol.iterator是js内置的,可以访问直接对象arr[Symbol.iterator],()调用 对象非线性一般不能迭代 后两个是伪数组,但是是真迭代器接口 类似于数组,但成员的值都是唯一的,没有重复 与数组不同的是set没有

    2024年04月11日
    浏览(55)
  • 记录--没有await,如何处理“回调地狱”

    不要嵌套使用函数。给每个函数命名并把他们放在你代码的顶层 利用函数提升。先使用后声明。 处理每一个异常 编写可以复用的函数,并把他们封装成一个模块 异步Javascript代码,或者说使用callback的Javascript代码,很难符合我们的直观理解。很多代码最终会写成这样: 看到

    2024年02月04日
    浏览(39)
  • Promise、Async/Await 详解

            Promise是抽象异步处理对象以及对其进行各种操作的组件。Promise本身是同步的立即执行函数解决异步回调的问题, 当调用 resolve 或 reject 回调函数进行处理的时候, 是异步操作, 会先执行.then/catch等,当主栈完成后,才会去调用执行resolve/reject中存放的方法。      

    2024年02月14日
    浏览(39)
  • async/await实现Promise.all()

    🐱个人主页: 不叫猫先生 🙋‍♂️作者简介:专注于前端领域各种技术,热衷分享,期待你的关注。 💫系列专栏:vue3从入门到精通 📝个人签名:不破不立 Promise.all() 方法接收一个 promise 的 iterable 类型(注:Array,Map,Set 都属于 ES6 的 iterable 类型)的输入,并且 只返回

    2024年01月18日
    浏览(44)
  • 彻底理解Promise和async/await

    1.异步行为是 为了优化因计算量大而时间长的操作 . 2.pedding 待定: 表示尚未开始或正在进行中    fulfilled 解决: 表示已经成功完成    rejected 拒绝: 表示没有完成 3.从pedding状态切换到fulfilled状态或rejected状态后,状态就不会再改变.而且也不能保证promise比如会脱离待定状态. 因此

    2024年02月03日
    浏览(48)
  • promise及异步编程async await

    ECMAScript 6 新增了正式的 Promise(期约)引用类型,支持优雅地定义和组织异步逻辑。接下来几个版本增加了使用 async 和 await 定义异步函数的机制 JavaScript 是单线程事件循环模型。异步行为是为了优化因计算量大而时间长的操作,只要你不想为等待某个异步操作而阻塞

    2024年02月04日
    浏览(42)
  • Promise, Generator, async/await的渐进理解

         作为前端开发者的伙伴们,肯定对Promise,Generator,async/await非常熟悉不过了。Promise绝对是烂记于心,而async/await却让使大伙们感觉到爽(原来异步可以这么简单)。可回头来梳理他们的关联时,你惊讶的发现,他们是如此的密切相关。       我对他们三者之间的关联

    2024年02月08日
    浏览(41)
  • 消灭异步回调,还得是 async-await

    关于异步处理问题,ES5的回调让我们陷入回调地狱轮回,后来ES6的Promise(Promise不了解?点这了解[1])让我们脱离轮回,终于,ES7的async-await带我们走向光明。今天我们就来学习一夏 async-await,看看与Promise有何联系和区别。 一、走进Async-await原理 1、原理1 async函数返回一个

    2024年02月10日
    浏览(52)
  • 前端面试:【异步编程】Callback、Promise和Async/Await

    嗨,亲爱的JavaScript探险家!在JavaScript开发的旅程中,你会经常遇到异步编程的需求。为了处理异步操作,JavaScript提供了多种机制,包括Callbacks、Promises和Async/Await。本文将深入介绍这些机制,让你能够更好地处理异步任务。 1. Callbacks:传统的异步方式 Callbacks是JavaScript中最早

    2024年02月11日
    浏览(84)
  • 深入学习JavaScript系列(七)——Promise async/await generator

    本篇属于本系列第七篇 第一篇:#深入学习JavaScript系列(一)—— ES6中的JS执行上下文 第二篇:# 深入学习JavaScript系列(二)——作用域和作用域链 第三篇:# 深入学习JavaScript系列(三)——this 第四篇:# 深入学习JavaScript系列(四)——JS闭包 第五篇:# 深入学习JavaScrip

    2023年04月08日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包