====== 差别 ======
这里会显示出您选择的修订版和当前版本之间的差别。
后一修订版 | 前一修订版 | ||
promise小专题 [2023/02/08 18:57] 若愚 创建 |
promise小专题 [2023/02/08 18:59] (当前版本) 若愚 |
||
---|---|---|---|
行 15: | 行 15: | ||
一、Promise封装ajax | 一、Promise封装ajax | ||
- | ```js | + | ```javascript |
function ajax(url = '', | function ajax(url = '', | ||
return new Promise((resolve, | return new Promise((resolve, | ||
行 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, | let p1 = new Promise(resolve => setTimeout(resolve, | ||
let p2 = new Promise(resolve => setTimeout(resolve, | let p2 = new Promise(resolve => setTimeout(resolve, | ||
行 67: | 行 67: | ||
该Promise.allSettled\(\)方法返回一个在所有给定的promise都已经fulfilled或rejected后的promise,并带有一个对象数组,每个对象表示对应的promise结果。 | 该Promise.allSettled\(\)方法返回一个在所有给定的promise都已经fulfilled或rejected后的promise,并带有一个对象数组,每个对象表示对应的promise结果。 | ||
- | ```js | + | ```javascript |
let p1 = new Promise((resolve, | let p1 = new Promise((resolve, | ||
let p2 = new Promise((resolve, | let p2 = new Promise((resolve, | ||
行 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, | let p1 = new Promise((resolve, | ||
let p2 = new Promise((resolve, | let p2 = new Promise((resolve, | ||
行 104: | 行 104: | ||
**手写Promise.all** | **手写Promise.all** | ||
- | ```js | + | ```javascript |
// | // | ||
// | // | ||
行 133: | 行 133: | ||
**手写Promise.race** | **手写Promise.race** | ||
- | ```js | + | ```javascript |
// | // | ||
//race 函数返回一个 Promise,它将与iterable对象里最先resolve或者reject的 promise 相同的完成方式被处理。 | //race 函数返回一个 Promise,它将与iterable对象里最先resolve或者reject的 promise 相同的完成方式被处理。 | ||
行 180: | 行 180: | ||
**手写Promise.allSettled** | **手写Promise.allSettled** | ||
- | ```js | + | ```javascript |
// | // | ||
// | // | ||
行 223: | 行 223: | ||
**手写Promise.any** | **手写Promise.any** | ||
- | ```js | + | ```javascript |
// | // | ||
// | // | ||
行 276: | 行 276: | ||
**手写Promise.last** | **手写Promise.last** | ||
- | ```js | + | ```javascript |
// | // | ||
//反问: Promise.last怎么实现? | //反问: Promise.last怎么实现? | ||
行 319: | 行 319: | ||
**手写Promise.queue** | **手写Promise.queue** | ||
- | ```js | + | ```javascript |
Promise.queue = function(arr, | Promise.queue = function(arr, | ||
return new Promise((resolve, | return new Promise((resolve, | ||
行 350: | 行 350: | ||
### 四、并发请求限制数量封装 | ### 四、并发请求限制数量封装 | ||
- | ```js | + | ```javascript |
function asyncPool(fn, | function asyncPool(fn, | ||
let args = [...arr] | let args = [...arr] | ||
行 400: | 行 400: | ||
### 五、实现Promisify | ### 五、实现Promisify | ||
- | ```js | + | ```javascript |
function promisify(fn, | function promisify(fn, | ||
return function(...args) { | return function(...args) { | ||
行 446: | 行 446: | ||
| | ||
+ | 未完待续 | ||
> 饥人谷一直致力于培养有灵魂的编程者,打造专业有爱的国内前端技术圈子。如造梦师一般帮助近千名不甘寂寞的追梦人把编程梦变为现实,他们以饥人谷为起点,足迹遍布包括facebook、阿里巴巴、百度、网易、京东、今日头条、大众美团、饿了么、ofo在内的国内外大小企业。 了解培训课程:加微信 [xiedaimala03](https:// | > 饥人谷一直致力于培养有灵魂的编程者,打造专业有爱的国内前端技术圈子。如造梦师一般帮助近千名不甘寂寞的追梦人把编程梦变为现实,他们以饥人谷为起点,足迹遍布包括facebook、阿里巴巴、百度、网易、京东、今日头条、大众美团、饿了么、ofo在内的国内外大小企业。 了解培训课程:加微信 [xiedaimala03](https:// | ||