• promise中合并对象的实例方法


    目录

    promise.all

    allSettled  

    any

    race:

    封装promiase---ajax:

    回调地狱


    promise.all

      1. 作用:和并请求

      2. 返回所有请求成功之后,返回数组,状态:fulfilled

      3. 返回所有请求中第一次抛出的错误,状态:rejected

      4. 如果在子请求中使用catch处理过了错误,则promise.all不会返回这个错误,如果剩下的都成功则返回一个数组,catch处理过的值为undefined

    allSettled  

    不管成功还是失败都是等全部结束,返回一个数组

    any

    返回第一个成功的回调,在第一个成功

    1. (function () {
    2. // promise.all
    3. // 1. 作用:和并请求
    4. // 2. 返回所有请求成功之后,返回数组,状态:fulfilled
    5. // 3. 返回所有请求中第一次抛出的错误,状态:rejected
    6. // 4. 如果在子请求中使用catch处理过了错误,则promise.all不会返回这个错误,如果剩下的都成功则返回一个数组,catch处理过的值为undefined
    7. // allSettled 不管成功还是失败都是等全部结束,返回一个数组
    8. // any 返回第一个成功的回调,在第一个成功的回调之前,任意一个实例已经进行了。then或者。catch的处理,则返回:成功fulfilled-undefined
    9. let p1 = new Promise((resolve, reject) => {
    10. reject('失败')
    11. setTimeout(() => {
    12. resolve('chengg1')
    13. }, 1000)
    14. })
    15. let p2 = new Promise((resolve, reject) => {
    16. setTimeout(() => {
    17. resolve('成功2')
    18. }, 3000)
    19. })
    20. // .then((res)=>{
    21. // console.log('resp2', res)
    22. // })
    23. let p3 = new Promise((resolve, reject) => {
    24. setTimeout(() => {
    25. resolve('cheng3')
    26. }, 4999)
    27. })
    28. // .then((res)=>{
    29. // console.log('resp3', res)
    30. // })
    31. let all = Promise.allSettled([p1, p2, p3])
    32. .then(
    33. (value) => {
    34. console.log('value-any', value)
    35. console.log(all, 'all')
    36. }, (reason) => {
    37. console.log('reason-any', reason)
    38. })
    39. console.log(all, 'all')
    40. })()

    race:

    返回第一个状态结束的

    1. (function () {
    2. //将多个promise实例包装成一个新的promise实例
    3. //1. 返回一个,实例中改变状态的值
    4. function r1() {
    5. return new Promise((resolve, reject) => {
    6. setTimeout(()=>{
    7. resolve('请求成功')
    8. },3000)
    9. })
    10. }
    11. function r2() {
    12. return new Promise((reslove, reject) => {
    13. setTimeout(()=>{
    14. reslove('请求超时')
    15. },2000)
    16. })
    17. }
    18. Promise.race([r1(),r2()]).then((value)=>{
    19. console.log('value', value) // 请求超时
    20. })
    21. })()

    封装promiase---ajax:

    1. (function(){
    2. // 封装ajax
    3. // 请求 https://api.github.com/search/users?q=xx
    4. function Ajax(url){
    5. return new Promise((resolve,reject)=>{
    6. //1. 创建
    7. let xhr = new XMLHttpRequest()
    8. xhr.open('GET',url,true)
    9. xhr.send(null)
    10. xhr.onreadystatechange = function(){
    11. if(xhr.readyState!==4) return
    12. if (xhr.status>=200 && xhr.status<300) {
    13. resolve(xhr.response)
    14. }else {
    15. // console.log(xhr.statusText)
    16. reject(new Error(xhr.status))
    17. }
    18. }
    19. xhr.onerror = function(){
    20. reject(new Error(xhr.statusText))
    21. }
    22. xhr.responseType = 'json'
    23. })
    24. }
    25. Ajax('https://api.github.com/search/users?q=tian')
    26. .then(
    27. (value)=>{
    28. console.log(value)
    29. },
    30. (reason)=>{
    31. console.log(reason)
    32. }
    33. )
    34. })()

    回调地狱

    多个串联的异步操作

    第一个.then  里面返回一个promise对象,第二个.then就是第一个返回的那个promise对象

  • 相关阅读:
    MySQL——连接查询与子查询
    QT 完整项目框架 功能总览
    烟台专利申请发明-个人发明专利申请条件
    Could not resolve all files for configuration ‘:app:debugRuntimeClasspath‘
    $refs $emit
    uniappAndroid平台签名证书(.keystore)生成
    登陆切换:将账号登陆切换为邮箱登录
    七夕看什么电影好?爬取电影评分并存入csv文件
    【华为OD机试真题 JS】计算面积
    windows下wsl2中的ubuntu和ubuntu系统下docker使用gpu的异同
  • 原文地址:https://blog.csdn.net/qq_52179917/article/details/127912421