同步与异步

同步与异步: 

    <script>
        /*
         *  浏览器端的运行环境是单线程
         *  Js引擎,渲染引擎
         *  读取代码时按照从上往下的顺序执行
         *
         *  任务的执行分两种:同步任务和异步任务
         *
         *  同步任务: 任务的排列顺序与执行顺序一一对应的,只有上一个任务执行完毕,才会执行下一个任务
         *  异步任务:任务的排列顺序与执行顺序不相关的,任务执行完时,会优先执行附带的回调函数,
         *
         *   举例,同步任务中,浏览器端向服务器端发送请求,只能等待服务器将数据返回到浏览器端时,浏览器才可以继续执行其他操作,否则就一直等待请求数据中....
         *
         *   异步的好处:将耗时长或者阻塞的任务封装到回调函数中,当条件满足时执行回调函数,避免遇到阻塞或者出现消耗时间
         *
         *
         *
         *   JS中有异步的现象:
         *   1. AJAX (请求数据并接收数据)
         *   2. setTimeout, setInterval
         *   3. img, script的src属性
         *   4. css动画/animation
         *   5. dom事件  是特殊的函数,被称为事件监听函数
         *
         *
         *   异步的解决方案(如何将耗时长的同步代码转换成异步)
         *   1. 回调函数 callback (jquery的方法) 比如:$().animate({css样式}, time, callback) 当动画执行完毕后执行callback
         *   2. 事件监听机制  div.onclick = function(){} ,
         *           addEventListener(eventName, function(){}, false) 冒泡 true(捕获)
         *   3. es6提出的promise,
         *   4. es6提出的async/await
         *
         *
         *   回调函数的定义:
         *   函数A作为参数传递到函数B中,当满足特定条件时,在函数B内部调用函数A,函数A被称为回调函数, 如果函数A没有名称,则被称为匿名回调函数
         *
         * */

        console.log('a');
        document.querySelector('div').onclick = function () {
            console.log('e');
        }
        console.log('b');

        setTimeout(function () {
            console.log('c')
        })
        console.log('d');

        // 普通函数
        function show() {

        }

        UserModel.findOne({
            username
        }).exec(function (err, data) {
            if (err) {
                console.log('获取数据失败')
            } else {
                console.log(data);
            }
        })

        // 封装成面向对象的方法
        var obj = {
            getUserByName: function (username, callback) {
                UserModel.findOne({
                    username
                }).exec(function (err, data) {
                    if (err) {
                        //                    console.log('获取数据失败')
                        callback(err);
                    } else {
                        //                    console.log(data);
                        callback(null, data);
                    }
                    //                callback(err, data)
                })
            }
        }

        obj.getUserByName('张三', function (err, data) {
            // 输出用户信息
            if (err) {
                return console.log('错误')
            }
            // 输出错误信息
            console.log(data);
        })
    </script>

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值