• promise defer的使用方法


     const defer = () => {
        const def = {}
        def.promise = new Promise((resolve, reject) => {
            def.resolve = resolve
            def.reject = reject
        })
    
        return def
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    <html>
    
    <head>
        <title>defer promise</title>
        <style>
            .dialog {
                top: 0;
                left: 0;
                right: 0;
                bottom: 0;
                display: flex;
                position: fixed;
                align-items: center;
                pointer-events: none;
                justify-content: center;
            }
    
            .dialog .mask {
                top: 0;
                left: 0;
                width: 100%;
                height: 100%;
                position: absolute;
                opacity: 0;
                transition: 0.3s;
                background-color: rgba(0, 0, 0, 0.4);
            }
    
            .dialog-content {
                padding: 20px;
                transition: 0.2s;
                opacity: 0;
                transform: scale(0.95);
                background-color: #fff;
            }
    
            .dialog.visible {
                pointer-events: all;
            }
    
            .dialog.visible .mask {
                opacity: 1;
            }
    
            .dialog.visible .dialog-content {
                opacity: 1;
                transform: scale(1);
            }
        </style>
    </head>
    
    <body>
        <div class="container">
            <button id="control">show modal</button>
            <div class="dialog" id="dialog">
                <div class="mask" onclick="this.parentNode.classList.remove('visible')"></div>
                <div class="dialog-content">
                    <input type="text" id="content" />
                    <button id="confirm">sure</button>
                </div>
            </div>
        </div>
    
        <script>
            const defer = () => {
                const def = {}
                def.promise = new Promise((resolve, reject) => {
                    def.resolve = resolve
                    def.reject = reject
                })
    
                return def
            }
    
                ; (() => {
                    const inputEl = document.getElementById('content')
                    const dialogEl = document.getElementById('dialog')
                    dialogEl.show = () => dialogEl.classList.add('visible')
                    dialogEl.hide = () => dialogEl.classList.remove('visible')
    
                    const dialogController = () => {
                        let dfd = null
                        const confirmBtn = document.getElementById('confirm')
                        confirmBtn.addEventListener('click', () => {
                            dialogEl.hide()
                            dfd.resolve(inputEl.value)
                        })
    
                        return () => {
                            dfd = defer()
                            dialogEl.show()
                            return dfd.promise
                        }
                    }
    
                    const openDialog = dialogController()
                    const controlBtn = document.getElementById('control')
                    controlBtn.addEventListener('click', async () => {
                        const message = await openDialog()
                        console.log('弹窗输入框信息:', message)
                    })
                })()
        </script>
    </body>
    
    </html>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 105
    • 106
  • 相关阅读:
    如何判断多用户商城系统是否靠谱?
    使用加强堆结构解决topK问题
    Springboot毕业设计毕设作品,黑白图片和上色处理系统 开题报告
    嵌入式Linux应用开发-驱动大全-第一章同步与互斥①
    HTML制作一个介绍自己家乡的网站——贵阳,排版整洁,内容丰富,主题鲜明
    记录Pcap4j使用的一次异常调查和分析
    应用在LED装饰灯中的LED炫彩灯珠
    ARM服务器上部署zookeeper集群
    90. 子集 II
    【实用工具】frp实现内网穿透
  • 原文地址:https://blog.csdn.net/weixin_42201346/article/details/125477771