面试题:没有es6老项目,如何用jq解决异步的问题?

2018-04-02

我们都知道es6提供了promise异步写法,但是大部分的公司都是jq写的,那我们如何用Jq来写和promise异步一样的写法呢?这个知道的人不多下面我们就来写写把

注意: 1 JQ 1.5以上 2 关键api: $.Deferred()

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
    <p>deferred test</p>

    <script src="https://cdn.bootcss.com/jquery/3.2.0/jquery.min.js"></script>
    <script type="text/javascript">

        // var wait = function () {
        //     var task = function () {
        //         console.log('执行完成')
        //     }
        //     setTimeout(task, 2000)
        // }
        // wait()

        // 已经封装好的(A 员工)
        function waitHandle() {
            // 定义
            var dtd = $.Deferred()
            var wait = function (dtd) {
                var task = function () {
                    console.log('执行完成')
                    // 成功
                    dtd.resolve()
                    // 失败
                    // dtd.reject()
                }
                setTimeout(task, 1000)
                // wait 返回
                return dtd.promise()
            }
            // 最终返回
            return wait(dtd)
        }

        // 使用(B 员工)
        var w = waitHandle()  // promise 对象
        $.when(w).then(function () {
            console.log('ok 1')
        }, function () {
            console.log('err 1')
        })

    </script>
</body>
</html>

这样就可以使用了,其实promise的前身就是jq的deffered,封装好之后用法差不多,es6把他规范化了而已

原文链接:segmentfault.com

上一篇:Jquery实现checkbox全选、取消全选和反选
下一篇:[翻译]关于Google发布的JS代码规范,你需要了解什么?
相关教程
关注微信

扫码加入 JavaScript 社区

相关文章

首次访问,需要验证
微信扫码,关注即可
(仅需验证一次)

欢迎加入 JavaScript 社区

号内回复关键字:

回到顶部