前言
入门
| <script> |
| btn.addEventListener("click", function(){ |
| |
| const p = new Promise((resole, reject) => { |
| setTimeout(()=>{ |
| let n = rand(1, 100); |
| if(n<=30){ |
| resole(n); |
| }else{ |
| reject(n); |
| } |
| }, 100); |
| }); |
| |
| p.then((value)=>{ |
| alert("成功!" + value); |
| },(reason)=>{ |
| alert("失败!" + reason); |
| }) |
| }) |
| </script> |
| |
| <script> |
| function sendAjax(url){ |
| return new Promise((resolve, reject) => { |
| const xhr = new XMLHttpRequest(); |
| xhr.open('GET', url); |
| xhr.send(); |
| xhr.onreadystatechange = function(){ |
| if(xhr.readyState == 4 && xhr.status == 200){ |
| resolve(xhr.response); |
| }else{ |
| reject(xhr.status); |
| } |
| } |
| }) |
| } |
| |
| sendAjax('http://localhost:8080/test') |
| .then(value => { |
| console.log(value); |
| }, reason => { |
| console.warn(reason); |
| }) |
| </script> |
promise对象的状态
- pending 未决定
- resolved 成功
- rejected 失败
PromiseResult
- 用于保存异步任务的结果(成功或失败)
- 只有resolve函数、reject函数可以改变该结果
catch
| |
| <script> |
| let p = new Promise((resolve, reject) =>{ |
| reject('error'); |
| }) |
| |
| |
| p.catch(reason => { |
| console.log(reason) |
| }) |
| </script> |
| |
resolve
| |
| <script> |
| |
| let p1 = Promise.resolve(123); |
| |
| let p2 = Promise.resolve(new Promise((resolve, reject) =>{ |
| reject('error'); |
| })) |
| |
| p2.catch(reason => { |
| console.log(reason); |
| }) |
| </script> |
| |
reject
| |
| <script> |
| let p = Promise.reject(123); |
| let p1 = Promise.reject('asd'); |
| |
| let p2 = Promise.reject(new Promise((resolve, reject) => { |
| resolve(123); |
| })); |
| </script> |
| |
all、race
| <script> |
| let p1 = new Promise((resolve, reject) => { |
| resolve('ok'); |
| }) |
| let p2 = Promise.reject('error'); |
| let p3 = Promise.resolve('hi'); |
| |
| |
| |
| const result = Promise.all([p1, p2, p3]); |
| console.log(result) |
| |
| |
| |
| const result1 = Promise.race([p1, p2, p3]); |
| console.log(result1) |
| </script> |
| |
创建对象
| var promise = new Promise(function(resolve, reject) { |
| |
| resole(n); |
| |
| reject(n); |
| |
| }); |
| |
| |
| p.then((value)=>{ |
| |
| },(reason)=>{ |
| |
| }) |
| |
让某个函数拥有promise功能,只需返回该对象
| function myFunction(url) { |
| return new Promise((resolve, reject) => { |
| |
| resole(n); |
| |
| reject(n); |
| |
| }); |
| }; |
| |
| |
| myFunction('http://localhost:8080/test') |
| .then(value => { |
| |
| }, reason => { |
| |
| }) |
| |
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
· 提示词工程——AI应用必不可少的技术