美文网首页js css html
promise基础语法

promise基础语法

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

    1. 前言

    1. 总算有机会写下 promise了, 之前写了篇promise基础,
    2. 这次从另外的角度引入 Promise,说不定有新的收获
    3. 基础的概念就不在叙述了 看之前的文章promise基础就行

    需求:读取一个文件,但是在函数外部访问读取的内容

    2. 回调函数解决方案

    1. 解决问题的方式, 可以缩思考几种
    2. 使用回调函数来实现,因为nodejs里面大量的异步 是使用回调函数来实现的,给我们提供了解决问题的思路
    3. 回调函数代码
    function block2( callBack ){
        fs.readFile("./01.txt", (err, data) => {
            if (err) return console.log("读取失败:", err);
            // callBack() 函数调用 就是去调用传过来的 函数
           // 异步的结果放入回调函数
            callBack(data)
          });
    }
    // 参数是回调函数
    block2( function(res){
        console.log("1-------res:",res.toString())
    } )
    
    1. 外部定义变量接收 读取结果,但是外部打印是 空,因为外部打印肯定先于异步读取里面的赋值操作先执行, 所以不行
    let result = ""
    fs.readFile("./01.txt", (err, data) => {
      if (err) return console.log("读取失败:", err);
      console.log("读取成功-1:", data.toString());
      result = data.toString()
    });
    console.log("方案1----result---:",result);// 空的 原因 异步
    
    1. 简单的使用闭包也不行
    // 函数外部访问函数内部的变量   函数内部 返回 函数的结果/函数本身
    function block (){
        fs.readFile("./01.txt", (err, data) => {
            if (err) return console.log("读取失败:", err);
    
            console.log("读取成功-2:", data.toString());
            return data.toString()
          });
    }
    console.log("方案2-----:",block()); //undefined
    

    3. promise 解决 方案

    1. 这个需求重点在于: 异步是不确定什么时候执行完成的,但是完成了 必须自己必须知道
      2.Promise是异步编程的一种解决方案,比传统的解决方案更合理和更强大。
    2. 从语法上说,Promise 是一个对象,从它可以获取异步操作的消息。Promise提供统一的 API,各种异步操作都可以用同样的方法进行处
    3. 语法演示
    // 参数: 是回调函数
    // 回调函数的参数:
    // 参数1: 函数 成功的回调 resolve()  成功 就传入数据
    // 参数2: 函数 失败的回调 reject()   失败就传入 错误原因
    let promise =  new Promise( (resolve,reject)=>{
         fs.readFile("./01.txt",(err,data)=>{
            if(err) reject(err)
            else resolve(data)
         })
     })
    // then  传入一个成功的回调函数 resolve
    promise.then(res=>{
        console.log("then----1",res.toString())
    })
    // catch 传入 一个失败回调  reject  修改不存在的路径来演示
    promise.catch(error=>{
        console.log("catch---error:",error)
    })
    

    1. 链式写法
    // 连写 链式调用  因为 .then() 返回的也是一个 新的 promise 所以可以 N 多个 .then()  fetch()
    promise.then(res=>{
        console.log("连写---成功:",res.toString())
    }).catch(err=>{
        console.log("连写 失败:",err)
    })
    

    1. then()回调
      可以有 2 个参数 一个成功回调,一个失败回调
    promise.then(   function(res){
        console.log("成功过的回调:",res)
    },  function(err){
        console.log("失败的回调:",err)
    }  )
    
    
    1. 注意:
      1. 成功的回调函数resolve是必选的,必须在then中传入, 失败的回调函数reject是可选的, 可以省略
      1. then函数获取promise异步结果不管在任何时间,任何位置调用, 不管调用多少次, 总能拿到异步结果

    参考资料

    promise 应用
    手写promise雏形
    配合 async/await


    初心

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

    相关文章

      网友评论

        本文标题:promise基础语法

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