js css html

promise基础语法

2022-09-28  本文已影响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. 注意:

参考资料

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


初心

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

猜你喜欢

热点阅读