promise 应用

简介: promise 应用

1. 前言

  1. 之前 2 篇文章整理的有点多async/await基础
    promise基础概念
    promise基础用法
  2. 所以这个把应用在单独抽出来,因为我们要知道 什么场景下 可以使用promise

2.  原生 ajax 封装

//  promise ajax封装
            function ajax(method, url, data) {
                var request = new XMLHttpRequest()
                request.open(method, url)
                request.send(data)
                return new Promise((resolve, reject) => {
                    //  未来某个时间调用,但具体的啥时候调用不清楚
                    //  所以我们用 promise 包裹起来 ,异步代码 同步的写法
                    request.onreadystatechange = function() {
                        if (request.readyState === 4) {
                            if (request.status === 200) {
                                // 请求成功的操作  转为 JSON 对象
                                resolve(JSON.parse(request.responseText))
                            } else {
                                // 请求失败的操作
                                reject(request.status)
                            }
                        }
                    }
                })
            }
  1. 页面使用

//  点击事件 发送 get请求
            let sendBtn = async () => {
                // 从用户 从使用者的角度去封装  异步代码 同步的写法
                ajax("GET", "./路径").then(res => {
                    console.log("成功:", res);
                }).catch(error => {
                    console.log("失败:", error);
                })
//******************************async/await
            try {
                    let res = await ajax("GET", "./路径")
                    console.log("成功:", res);
                } catch (e) {
                    console.log("失败:", e);
                }
            }

3.  小程序 请求封装

  1. promise 封装

const getApi = (url, data) => {
  wx.showLoading({
    title: '加载中',
    mask: true
  })
  // Promise 承诺:处理异步回调 同意  拒绝
  return new Promise(function (resolve, reject) {
    // 只能走一个 要么同意 要么拒绝
    // resolve() 回调then()
    // reject() 回调catch() 
    wx.request({
      url: baseUrl + url,
      data,
      header: {
        'content-type': 'application/json' // 默认值
      },
      success: (res) => {
        resolve(res.data)
      },
      fail: () => {
        wx.showToast({
          title: '服务器错误',
          icon: 'error',
          duration: 2000
        })
        reject("服务器错误,请稍后重试");
      },
      complete(res) {
        // console.log("complete",res);
        wx.hideLoading()
        // wx.stopPullDownRefresh()
      }
    })
  })
}

  1. 回调函数封装

function getApi(url, data, successCB) {
  wx.showLoading({
    title: '加载中',
  })
  wx.request({
    url: baseUrl + url,
    data,
    header: {
      'content-type': 'application/json' // 默认值
    },
    success: (res) => {
      if (res.code = 200) {
        //   回调到组件 ,数据给他
        successCB && successCB(res.data)
      } else {
        wx.showToast({
          title: '服务器错误',
          icon: 'error',
          duration: 2000
        })
      }
    },
    fail: (err) => {
      wx.showToast({
        title: '服务器错误',
        icon: 'error',
        duration: 2000
      })
      console.log("错误信息:", err);
    },
    complete(res) {
      // console.log("complete",res);
      wx.hideLoading()
      // wx.stopPullDownRefresh()
    }
  })
}

4.   多异步任务并发执行解决方案

  1. nodejs后端为例

// 异步函数用法举例: 
var fs = require("fs")
var p1 = new Promise(function(resolve){
    fs.readFile("./data/a.txt",function(err,data){
        resolve(data)
    })  
})
var p2 = new Promise(function(resolve){
    fs.readFile("./data/b.txt",function(err,data){
        resolve(data)
    })  
})
var p3 = new Promise(function(resolve){
    fs.readFile("./data/c.txt",function(err,data){
        resolve(data)
    })  
})
var p4 = new Promise(function(resolve){
    fs.readFile("./data/d.txt",function(err,data){
        resolve(data)
    })  
})
// 多异步任务并发执行方案一: promise合并
var allP = Promise.all([p1,p2,p3,p4])
allP.then(function(res){
    console.log(res.join(""))
})
// 多异步任务并发执行方案二: 异步函数
async function getData(){
    var data1 = await p1;
    var data2 = await p2;
    var data3 = await p3;
    var data4 = await p4;
    console.log(data1 + data2 + data3 + data4)
}
getData()

参考资料

async/await基础

promise基础

promise基础用法


初心

我所有的文章都只是基于入门,初步的了解;是自己的知识体系梳理,如有错误,道友们一起沟通交流;
如果能帮助到有缘人,非常的荣幸,一切为了部落的崛起;
共勉
相关文章
|
6月前
|
前端开发 JavaScript 开发者
前端开发中的异步编程:Promise 和 Async/Await 的比较与应用
在现代前端开发中,异步编程是不可或缺的技术。本文将深入探讨Promise和Async/Await这两种主流的异步编程方式,分析它们的优劣势及在实际项目中的应用场景。通过比较它们的语法、可读性和错误处理机制,帮助开发者更好地选择和理解如何在项目中高效地利用这些技术。
|
7月前
|
前端开发
Promise 和 Async/await 在实际开发中的应用场景
Promise 和 Async/await 在实际开发中的应用场景
|
7月前
|
前端开发 NoSQL Serverless
Serverless 应用引擎操作报错合集之阿里函数计算中,出现"Unhandled promise rejection"的错误如何解决
Serverless 应用引擎(SAE)是阿里云提供的Serverless PaaS平台,支持Spring Cloud、Dubbo、HSF等主流微服务框架,简化应用的部署、运维和弹性伸缩。在使用SAE过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
127 1
|
7月前
|
前端开发 JavaScript
JavaScript 中的异步编程:Promise 和 Async/Await 的实现与应用
在Web开发中,JavaScript异步编程是一个不可忽视的重要话题。本文将深入探讨JavaScript中Promise和Async/Await的实现原理与应用场景,通过实例代码带您了解如何优雅地处理异步操作,提升代码的可读性和可维护性。
|
7月前
|
前端开发 JavaScript
JavaScript中的异步编程及Promise的应用
在前端开发中,异步编程是常见的需求,而Promise作为一种解决异步操作的技术,具有很高的应用价值。本文将介绍JavaScript中的异步编程原理,并结合实际案例详细讲解Promise的使用方法及其在前端开发中的应用。
52 2
|
7月前
|
前端开发 JavaScript API
JavaScript中的异步编程及Promise应用
在现代Web开发中,JavaScript的异步编程已经成为了一个重要的话题。本文将介绍JavaScript中的异步编程模式,以及通过Promise对象来简化异步操作的方法。通过深入理解并掌握JavaScript中的异步编程,可以提高代码的可读性和可维护性,从而更好地应对复杂的业务逻辑。
33 2
|
7月前
|
前端开发 JavaScript
JavaScript中的异步编程及Promise应用
在现代Web开发中,JavaScript的异步编程已经成为不可或缺的一部分。本文将介绍JavaScript中的异步编程概念,探讨回调地狱问题,并详细介绍Promise作为一种更优雅的解决方案。通过示例代码和实际场景应用,帮助读者更好地理解和应用Promise来处理异步操作。
|
前端开发 JavaScript 开发者
什么是promise?如何使用?应用场景?
什么是promise?如何使用?应用场景?
134 0
|
前端开发 JavaScript
Promise和async/await的使用及其应用场景
Promise和async/await的使用及其应用场景
273 0
|
前端开发
Promise.all和promise.race的应用场景举例
Promise.all和promise.race的应用场景举例
277 0