文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Promise对象怎么在Nodejs中使用

2023-06-14 09:16

关注

这期内容当中小编将会给大家带来有关Promise对象怎么在Nodejs中使用,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

Promise对象

1. promise用来做什么?

我们的需求是一次的去执行异步代码

我们的做法是在异步请求成功后的回调函数里,执行下一个异步请求

但是这样就出现了回调地狱(回调函数中嵌套了回调函数,代码的阅读性 低,维护不变,让人看着害怕)

promise就是用来解决回调地狱的

回调地狱示例:

// 需求:一次的读取a,b,c这三个文件const fs = require("fs");// 读a文件fs.readFile(`${__dirname}/etc/a.txt`, "utf-8", (err, data) => {  if (err) {    console.log(err);  } else {    console.log(data);    // 读b文件    fs.readFile(`${__dirname}/etc/b.txt`, "utf-8", (err, data) => {      if (err) {        console.log(err);      } else {        console.log(data);        // 读c文件        fs.readFile(`${__dirname}/etc/c.txt`, "utf-8", (err, data) => {          if (err) {            console.log(err);          } else {            console.log(data);          }        });      }    });  }});

2. promise工作流程

es6的语法,es6.ruanyifeng.com

Promise对象是一个构造函数 ,用来生成promise实例

Promise构造函数接受一个函数作为参数

这个作为参数的函数,又有两个参数,这两个参数分别是resolve和reject

这两个参数它们也是函数,只不过这两个函数由 javascript 引擎提供,不用自己部署

异步操作成功后调用resolve()方法,他内部调用了then()里面的第一个参数函数

异步操作成功后调用reject()方法,他内部调用了then()里面的第二个参数函数.

const fs = require("fs");// 调用Promise构造函数,创建一个promise的实例let p = new Promise((resolve, reject) => {  // 写异步操作(读文件)  fs.readFile(`${__dirname}/etc/a.txt`, "utf-8", (err, data) => {    if (!err) {      // 操作成功(读文件成功)      resolve(data); // 调用resolve方法      // 调用then()里面的第一个参数函数    } else {      reject(err); // 调用reject方法      // 调用then()里面的第二个参数函数    }  });});p.then(  (data) => {    console.log(data);  },  (err) => {    console.log(err);  });

3. promise原理

Promise对象代表一个异步操作.

有三种状态: pending (进行中)、fulfilled (已成功)和rejected (已失败)

Promise对象的状态改变,只有两种可能:从pending变 为fulfilled和从pending变为rejected。

只有异步操作的结果,可以决定当前是哪一种状态,任何其他操作都无法改变这个状态

如果异步操作成功了(读文件成功了),从pending (进行中)变为 fulfilled (已成功) ;

如果异步操作失败了(读文件失败了),从pending (进行中)变为 rejected (已失败) ;

状态如果已经确定了, 就不会再去改变这个状态了

4. promise特点及其封装

Promise新建后就会立即执行

所以不要在promise里面写其他的代码,只写这个异步操作的代码就可以了

const fs = require("fs");function getPromise(filename) {  // 调用Promise构造函数,创建一个promise的实例  return new Promise((resolve, reject) => {    // 写异步操作(读文件)    fs.readFile(`${__dirname}/etc/${filename}.txt`, "utf-8", (err, data) => {      if (!err) {        // 操作成功(读文件成功)        resolve(data); // 调用resolve方法        // 调用then()里面的第一个参数函数      } else {        reject(err); // 调用reject方法        // 调用then()里面的第二个参数函数      }    });  });}// console.log(getPromise("a"));getPromise("a").then(  (data) => {    console.log(data);  },  (err) => {    console.log(err);  });

5. promise正确写法

promise如何解决回调地狱

-》 链式编程解决

**我们用promise解决的问题:让异步操作有顺序,并且不能有回调地狱 **

让异步操作有顺序本质是:

异步操作实际上是没有顺序的

在异步操作成功后的回调函数里返回另外的promise,调用他的then方法

const fs = require("fs");function getPromise(filename) {  // 调用Promise构造函数,创建一个promise的实例  return new Promise((resolve, reject) => {    // 写异步操作(读文件)    fs.readFile(`${__dirname}/etc/${filename}.txt`, "utf-8", (err, data) => {      if (!err) {        // 操作成功(读文件成功)        resolve(data); // 调用resolve方法        // 调用then()里面的第一个参数函数      } else {        reject(err); // 调用reject方法        // 调用then()里面的第二个参数函数      }    });  });}// console.log(getPromise("a"));getPromise("a")  .then((data) => {    console.log(data);    //调用函数得到一个读b文件的promise对象并返回    return getPromise("b");  })  .then((data) => {    console.log(data);    //调用函数得到一个读c文件的promise对象并返回    return getPromise("c");  })  .then((data) => {    console.log(data);  });

6. promise的其他方法

上述就是小编为大家分享的Promise对象怎么在Nodejs中使用了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注编程网行业资讯频道。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯