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
Promise.allSettled()方法的语法是什么?
Promise.allSettled()方法的语法是什么?
246 79
|
前端开发 JavaScript
js【详解】Promise(含 Promise 的三种状态及其变化,创建 Promise, Promise.all 语法、Promise.all 实战范例、手写 Promise.all)
js【详解】Promise(含 Promise 的三种状态及其变化,创建 Promise, Promise.all 语法、Promise.all 实战范例、手写 Promise.all)
1705 0
|
前端开发 JavaScript
Promise基础语法
这里是Promise的一些基础语法,是很简单的,之后我们会带来Promsie的进阶内容!
112 1
|
前端开发 JavaScript API
📕重学JavaScript:Promise 的状态和语法
有些操作不是我们自己做的,而是让环境或者外面的 JavaScript 帮我们做的。👥 这样的操作叫做异步操作,就像是我们给别人打电话,让他们帮我们办事一样。📞
215 0
📕重学JavaScript:Promise 的状态和语法
|
5月前
|
前端开发
使用 async/await 结合 try/catch 处理 Promise.reject()抛出的错误时,有什么需要注意的地方?
使用 async/await 结合 try/catch 处理 Promise.reject()抛出的错误时,有什么需要注意的地方?
227 57
|
8月前
|
前端开发 JavaScript 开发者
Async 和 Await 是基于 Promise 实现
【10月更文挑战第30天】Async和Await是基于Promise实现的语法糖,它们通过简洁的语法形式,借助Promise的异步处理机制,为JavaScript开发者提供了一种更优雅、更易于理解和维护的异步编程方式。
111 1
|
8月前
|
前端开发
如何使用async/await解决Promise的缺点?
总的来说,`async/await` 是对 Promise 的一种很好的补充和扩展,它为我们提供了更高效、更易读、更易维护的异步编程方式。通过合理地运用 `async/await`,我们可以更好地解决 Promise 的一些缺点,提升异步代码的质量和开发效率。
181 64
|
8月前
|
前端开发 JavaScript
async/await和Promise在性能上有什么区别?
性能优化是一个综合性的工作,除了考虑异步模式的选择外,还需要关注代码的优化、资源的合理利用等方面。
230 63
|
8月前
|
JSON 前端开发 JavaScript
浅谈JavaScript中的Promise、Async和Await
【10月更文挑战第30天】Promise、Async和Await是JavaScript中强大的异步编程工具,它们各自具有独特的优势和适用场景,开发者可以根据具体的项目需求和代码风格选择合适的方式来处理异步操作,从而编写出更加高效、可读和易于维护的JavaScript代码。
123 1