美文网首页
promise 应用

promise 应用

作者: 云高风轻 | 来源:发表于2022-09-26 17:42 被阅读0次

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基础用法


初心

我所有的文章都只是基于入门,初步的了解;是自己的知识体系梳理,如有错误,道友们一起沟通交流;
如果能帮助到有缘人,非常的荣幸,一切为了部落的崛起;
共勉

相关文章

  • Promise.any

    一 :本文从五个方面介绍 Promise.any : Promise.any 的作用 Promise.any 应用...

  • Promise.any 的作用,如何自己实现一个 Promise

    引言 本文从五个方面介绍 Promise.any : Promise.any 的作用 Promise.any 应用...

  • Promise应用

    1、使用Promise封装Ajax请求 作者:这波能反杀链接:https://www.jianshu.com/p/...

  • promise 应用

    1. 前言 之前 2 篇文章整理的有点多async/await基础[https://www.jianshu.com...

  • ES6:Promise 应用

    将图片的加载写成一个Promise,一旦加载完成,Promise的状态就发生变化。 应用

  • promise的实际应用

    1.https://www.jianshu.com/p/c85953427e54 2.回调嵌套 3.改写成promise

  • Promise 几点实战应用

    简介 长话短说,promise 是 EcmaScript 6 提出的新特性,主要是用来解决异步调用中过度依赖回调的...

  • JS Promise的应用

    Promise 是异步编程的一种解决方案,比传统的解决方案——回调函数和事件——更合理和更强大。 简单理解: Pr...

  • 简述promise原理

    Promise/A+规范 一、 promise应用场景 1 解决回调地狱比如我们经常可能需要异步请求一个数据之后作...

  • Promise.allSettled理解

    ES6引入的Promise极大地提升了我们在写js应用的编码体验, 我们可以很方便得使用Promise进行异步流程...

网友评论

      本文标题:promise 应用

      本文链接:https://www.haomeiwen.com/subject/kblxartx.html