站点工具

用户工具


====== 差别 ======

这里会显示出您选择的修订版和当前版本之间的差别。

到此差别页面的链接

后一修订版
前一修订版
promise小专题 [2023/02/08 18:57]
若愚 创建
promise小专题 [2023/02/08 18:59] (当前版本)
若愚
行 15: 行 15:
 一、Promise封装ajax 一、Promise封装ajax
  
-```js+```javascript
 function ajax(url = '', method = 'GET', data = {}) { function ajax(url = '', method = 'GET', data = {}) {
   return new Promise((resolve, reject) => {   return new Promise((resolve, reject) => {
行 46: 行 46:
 Promise.all\(\) 方法接收一个数组做为输入严格来说是iterable类型,Array,Map,Set都属于iterable类型),数组的每一项是Promise实例(如果不是会创建一个resolve的Promise实例),运行结果返回一个Promise实例。 当数组里promise全部 resolve时再resolve,结果是所有promise resolve的结果构成的一个数组。 如果中途任何一个promise 执行reject,则Promise.all得到的Promise实例立即reject, Promise.all\(\) 方法接收一个数组做为输入严格来说是iterable类型,Array,Map,Set都属于iterable类型),数组的每一项是Promise实例(如果不是会创建一个resolve的Promise实例),运行结果返回一个Promise实例。 当数组里promise全部 resolve时再resolve,结果是所有promise resolve的结果构成的一个数组。 如果中途任何一个promise 执行reject,则Promise.all得到的Promise实例立即reject,
  
-```js+```javascript
 let p1 = new Promise(resolve => setTimeout(resolve, 2000, 1)) let p1 = new Promise(resolve => setTimeout(resolve, 2000, 1))
 let p2 = new Promise(resolve => setTimeout(resolve, 3000, 2)) let p2 = new Promise(resolve => setTimeout(resolve, 3000, 2))
行 67: 行 67:
 该Promise.allSettled\(\)方法返回一个在所有给定的promise都已经fulfilled或rejected后的promise,并带有一个对象数组,每个对象表示对应的promise结果。 该Promise.allSettled\(\)方法返回一个在所有给定的promise都已经fulfilled或rejected后的promise,并带有一个对象数组,每个对象表示对应的promise结果。
  
-```js+```javascript
 let p1 = new Promise((resolve, reject) => setTimeout(resolve, 2000, 1)) let p1 = new Promise((resolve, reject) => setTimeout(resolve, 2000, 1))
 let p2 = new Promise((resolve, reject) => setTimeout(resolve, 3000, 2)) let p2 = new Promise((resolve, reject) => setTimeout(resolve, 3000, 2))
行 89: 行 89:
 Promise.race\(iterable\)方法返回一个 promise,一旦迭代器中的某个promise resolve或reject,返回的 promise就会resolve或reject。 Promise.race\(iterable\)方法返回一个 promise,一旦迭代器中的某个promise resolve或reject,返回的 promise就会resolve或reject。
  
-```js+```javascript
 let p1 = new Promise((resolve, reject) => setTimeout(resolve, Math.random()*1000, 1)) let p1 = new Promise((resolve, reject) => setTimeout(resolve, Math.random()*1000, 1))
 let p2 = new Promise((resolve, reject) => setTimeout(resolve, Math.random()*1000, 2)) let p2 = new Promise((resolve, reject) => setTimeout(resolve, Math.random()*1000, 2))
行 104: 行 104:
 **手写Promise.all** **手写Promise.all**
  
-```js+```javascript
 //参数:一个迭代器对象,比如 String, Array, TypedArray, Map, and Set //参数:一个迭代器对象,比如 String, Array, TypedArray, Map, and Set
 //如果传递了一个空迭代器,返回的Promise对象会同步的resolve,resolve的值是空对象 //如果传递了一个空迭代器,返回的Promise对象会同步的resolve,resolve的值是空对象
行 133: 行 133:
 **手写Promise.race** **手写Promise.race**
  
-```js+```javascript
 //参数,一个iterable对象。比如 String, Array, TypedArray, Map, and Set  //参数,一个iterable对象。比如 String, Array, TypedArray, Map, and Set 
 //race 函数返回一个 Promise,它将与iterable对象里最先resolve或者reject的 promise 相同的完成方式被处理。 //race 函数返回一个 Promise,它将与iterable对象里最先resolve或者reject的 promise 相同的完成方式被处理。
行 180: 行 180:
 **手写Promise.allSettled** **手写Promise.allSettled**
  
-```js+```javascript
 //参数:一个iterable对象。比如 String, Array, TypedArray, Map, and Set  //参数:一个iterable对象。比如 String, Array, TypedArray, Map, and Set 
 //返回一个Promise对象,会异步resolve,结果是一个数组,里面每一项是个对象,包含 status 和 value 或者reason两个属性。每个对象是iterable对象每一个 resolve或者reject的结果构成的对象 //返回一个Promise对象,会异步resolve,结果是一个数组,里面每一项是个对象,包含 status 和 value 或者reason两个属性。每个对象是iterable对象每一个 resolve或者reject的结果构成的对象
行 223: 行 223:
 **手写Promise.any** **手写Promise.any**
  
-```js+```javascript
 //参数:一个iterable对象。比如 String, Array, TypedArray, Map, and Set  //参数:一个iterable对象。比如 String, Array, TypedArray, Map, and Set 
 //返回一个Promise对象, //返回一个Promise对象,
行 276: 行 276:
 **手写Promise.last** **手写Promise.last**
  
-```js+```javascript
 //Promise.first 等同于Promise.any //Promise.first 等同于Promise.any
 //反问: Promise.last怎么实现? //反问: Promise.last怎么实现?
行 319: 行 319:
 **手写Promise.queue** **手写Promise.queue**
  
-```js+```javascript
 Promise.queue = function(arr, initValue) { Promise.queue = function(arr, initValue) {
   return new Promise((resolve, reject) => {   return new Promise((resolve, reject) => {
行 350: 行 350:
 ### 四、并发请求限制数量封装 ### 四、并发请求限制数量封装
  
-```js+```javascript
 function asyncPool(fn, arr, limit = 10) { function asyncPool(fn, arr, limit = 10) {
   let args = [...arr]   //不修改原参数数组   let args = [...arr]   //不修改原参数数组
行 400: 行 400:
 ### 五、实现Promisify ### 五、实现Promisify
  
-```js+```javascript
 function promisify(fn, context = null) { function promisify(fn, context = null) {
   return function(...args) {   return function(...args) {
行 446: 行 446:
      
  
 +未完待续
  
 > 饥人谷一直致力于培养有灵魂的编程者,打造专业有爱的国内前端技术圈子。如造梦师一般帮助近千名不甘寂寞的追梦人把编程梦变为现实,他们以饥人谷为起点,足迹遍布包括facebook、阿里巴巴、百度、网易、京东、今日头条、大众美团、饿了么、ofo在内的国内外大小企业。 了解培训课程:加微信 [xiedaimala03](https://wiki.jirengu.com/lib/exe/fetch.php?w=400&tok=5c45ca&media=%E9%A5%A5%E4%BA%BA%E8%B0%B7%E4%BC%81%E4%B8%9A%E5%BE%AE%E4%BF%A1%E5%B0%8F%E5%8A%A9%E7%90%86black.png),官网:https://jirengu.com > 饥人谷一直致力于培养有灵魂的编程者,打造专业有爱的国内前端技术圈子。如造梦师一般帮助近千名不甘寂寞的追梦人把编程梦变为现实,他们以饥人谷为起点,足迹遍布包括facebook、阿里巴巴、百度、网易、京东、今日头条、大众美团、饿了么、ofo在内的国内外大小企业。 了解培训课程:加微信 [xiedaimala03](https://wiki.jirengu.com/lib/exe/fetch.php?w=400&tok=5c45ca&media=%E9%A5%A5%E4%BA%BA%E8%B0%B7%E4%BC%81%E4%B8%9A%E5%BE%AE%E4%BF%A1%E5%B0%8F%E5%8A%A9%E7%90%86black.png),官网:https://jirengu.com
  
若愚 · 2023/02/08 18:57 · promise小专题.1675853863.txt.gz