Promise用法

1.概述

Promise是一步编程的一种解决方案,从语法上讲,promise是一个对象,从它可以获取异步的问题

Promise的优点:

可以避免多次异步调用嵌套导致的回调地域

提供了简洁的api,使得控制异步变得简单更加容易

详细promise使用规则https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise

 

2.使用

实例化Promise对象,构造函数中传递参数,该函数用于传递异步任务

resolve和reject两个参数用于 处理成功和失败的两种情况,并通过p.then获取处理结果

代码实列:

1 var p = new Promise(function (resolve, reject) { 2 //用于实现异步任务 3 setTimeout(function () { 4 var flag = true 5 if (flag) { 6 resolve('成功') 7 } else { 8 reject('失败') 9 } 10 }) 11 },1000) 12 p.then(function (success) { 13 //这里面是成功了要执行的操作 14 console.log(success); 15 }, 16 function (error) { 17 //这里面是失败了要进行的操作 18 console.log(error); 19 })

3.使用Promise发送Ajax请求

先封装一个函数,可以重复调用。

1
 //     })
        function P(url) {
            var p = new Promise(function (resolve, reject) {
                var xhr = new XMLHttpRequest()
                xhr.open('get', url, true)
                xhr.onreadystatechange = function (res, req) {
                    if (req.status === 200) {
                        resolve(req.responseText)
                    } else {
                        reject('错误')
                    }
                }
                xhr.send()
            })
        }
        var URL = "api地址";
        P(URL).then(function onFulfilled(value) {
            console.log(value);
        }).catch(function onRejected(error) {
            console.log(error);
        });

 4.Promise的实列方法

p.then()得到异步任务的正确结果

p.catch()获取异常信心

p.finally()无论正确还是错误都会执行(不是正式版本)

1 P().then(function (data) { 2 console.log(data); 3 }) 4 P().catch(function (data) { 5 console.log(data); 6 }) 7 p().finally(function (data) { 8 console.log(data); 9 })

5.Promise的对象方法

Promise.all()并发处理多个任务,所有任务都执行完成才能得到结果

Promise.race()并发处理多个异步任务,只要有一个任务完成就能得到结果

all用法

1 var a=p(url1) 2 var b=P(url2) 3 var c=P(url3) 4 Promise.all([a,b,c]).then(function(data){ 5 console.log(data); 6 })

控制台得到的data是三个实列都执行完成后才会输出log

race用法

1 var a = p(url1) 2 var b = P(url2) 3 var c = P(url3) 4 Promise.race([a, b, c]).then(function (data) { 5 console.log(data); 6 })

其中只要有一个实列执行完成后就会输出log,用法跟all相同,只不过执行条件不同

 


__EOF__

本文作者xiaopo
本文链接https://www.cnblogs.com/xiaopo/p/14333955.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   小破的博客  阅读(254)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示