Promise的使用案例(一)

promise在前端开发中难免需要使用,在了解了promise之后做一些使用案例可以加深对promise的理解,方便日后熟练使用promise,本次的案例为:

Promise在表单验证中的使用

在表单验证中会出现常见的通过情况和不通过情况,在用promise实现验证的过程中,通过的情下况执行resolve回调,不通的情况下过则执行reject回调,以此达到验证提交数据是否合法的目的,下面用一个表单验证中验证图片数据是否合法的案例做演示。

 代码如下:

    <form name="fm">
        <fieldset>
            <legend>图像信息</legend>
            <!-- 给该input的type设置为file,设置为file的input具有files属性(该属性包含了上传文件的数据),最后还要给该标签设置其在输入改变时触发的事件-->
            <input type="file" name="imgInfo" onchange="show();">
            <div id='prev'></div>
        </fieldset>
    </form>
    <script>
        // 函数得到一个文件类型的参数
        function uploadImage(imgUrl) {
            let allowType = ["image/jpeg", "image/png", "image/gif"],//限制图片类型
                allowSize = 2000 * 1024,//限制图片大小为2M
                fr = new FileReader();// 使用构造函数获取一个文件阅读器
                fr.readAsDataURL(imgUrl);// 该文件阅读器的阅读方式为readAsDataURL,并以该方式阅读传入的文件
            return new Promise(function (resolve, reject) {
                if (allowType.indexOf(imgUrl.type) < 0) {
                    reject(new Error('上传的文件类型不被允许!'));
                };
                if (imgUrl.size > allowSize) {
                    reject(new Error('文件太大了,弄个小一点的'));
                };
                // 文件阅读器fr阅读成功时的回调
                fr.onloadend = function () {
                    resolve(this.result);
                };
                // 文件阅读器fr阅读失败时的回调
                fr.onerror = function () {
                    reject(new Error('读取发生错误'));
                }
            })
        }
        //处理上传的图片信息
        function show() {
            // 把图片文件的url格式作为uploImage函数的参数传给uploImage函数
            uploadImage(document.fm.imgInfo.files[0]).then(info => {
                prev.innerHTML = `<img src='${info}' />`//上传成功则在页面展示预览
            }, reason => {
                alert(reason.message);//上传失败则提示错误信息
            })
        }
    </script>

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值