promise基础语法

简介: promise基础语法

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是可选的, 可以省略
  2. then函数获取promise异步结果不管在任何时间,任何位置调用, 不管调用多少次, 总能拿到异步结果

参考资料

promise 应用

手写promise雏形

配合 async/await


初心

我所有的文章都只是基于入门,初步的了解;是自己的知识体系梳理,如有错误,道友们一起沟通交流;
如果能帮助到有缘人,非常的荣幸,一切为了部落的崛起;
共勉
相关文章
|
6月前
|
前端开发 JavaScript
js【详解】Promise(含 Promise 的三种状态及其变化,创建 Promise, Promise.all 语法、Promise.all 实战范例、手写 Promise.all)
js【详解】Promise(含 Promise 的三种状态及其变化,创建 Promise, Promise.all 语法、Promise.all 实战范例、手写 Promise.all)
831 0
|
前端开发 JavaScript
Promise基础语法
这里是Promise的一些基础语法,是很简单的,之后我们会带来Promsie的进阶内容!
72 1
|
前端开发 JavaScript API
📕重学JavaScript:Promise 的状态和语法
有些操作不是我们自己做的,而是让环境或者外面的 JavaScript 帮我们做的。👥 这样的操作叫做异步操作,就像是我们给别人打电话,让他们帮我们办事一样。📞
118 0
📕重学JavaScript:Promise 的状态和语法
|
8月前
|
前端开发 JavaScript
如何处理 JavaScript 中的异步操作和 Promise?
如何处理 JavaScript 中的异步操作和 Promise?
75 1
|
8月前
|
前端开发 JavaScript
在JavaScript中,什么是promise、怎么使用promise、怎么手写promise
在JavaScript中,什么是promise、怎么使用promise、怎么手写promise
114 4
|
8月前
|
前端开发 JavaScript 开发者
JavaScript 中的异步编程:Promise 和 Async/Await
在现代的 JavaScript 开发中,异步编程是至关重要的。本文将介绍 JavaScript 中的异步编程概念,重点讨论 Promise 和 Async/Await 这两种常见的处理异步操作的方法。通过本文的阐述,读者将能够更好地理解和应用这些技术,提高自己在 JavaScript 开发中处理异步任务的能力。
|
7月前
|
前端开发 JavaScript 开发者
JavaScript进阶-Promise与异步编程
【6月更文挑战第20天】JavaScript的Promise简化了异步操作,从ES6开始成为标准。Promise有三种状态:pending、fulfilled和rejected。基本用法涉及构造函数和`.then`处理结果,如: ```javascript new Promise((resolve, reject) => { setTimeout(resolve, 2000, '成功'); }).then(console.log); // 输出: 成功
101 4
|
8月前
|
JSON 前端开发 JavaScript
【JavaScript技术专栏】JavaScript异步编程:Promise、async/await解析
【4月更文挑战第30天】JavaScript中的异步编程通过Promise和async/await来解决回调地狱问题。Promise代表可能完成或拒绝的异步操作,有pending、fulfilled和rejected三种状态。它支持链式调用和Promise.all()、Promise.race()等方法。async/await是ES8引入的语法糖,允许异步代码以同步风格编写,提高可读性和可维护性。两者结合使用能更高效地处理非阻塞操作。
121 0
|
6月前
|
前端开发 JavaScript
JavaScript异步编程:Promise与async/await的深入探索
【7月更文挑战第9天】Promise和async/await是JavaScript中处理异步编程的两大利器。Promise为异步操作提供了统一的接口和链式调用的能力,而async/await则在此基础上进一步简化了异步代码的书写和阅读。掌握它们,将使我们能够更加高效地编写出清晰、健壮的异步JavaScript代码。
|
6月前
|
前端开发 JavaScript 定位技术
JavaScript 等待异步请求数据返回值后,继续执行代码 —— async await Promise的使用方法
JavaScript 等待异步请求数据返回值后,继续执行代码 —— async await Promise的使用方法
94 1