当前位置:首页 > 生活百科

nodejs菜鸟安装教程(nodejs管理员方式运行)

栏目:生活百科日期:2025-04-03浏览:0

学习背景

实现nodejs的非阻塞IO就需要异步函数,之前我们讲了异步的几种实现方案。其中就说到了Promise的方案,这章呢我们详细的讲一讲Promise方案的详细用法,以及为什么nodejs要提供一个Promise。

Promise 用法

之前我们遇到了callback方法过多的话会形成回调地狱问题,这时我们的代码就形成了一层一层的回调嵌套,就像洋葱一样。这时候变量作用域也不清晰了,执行时序问题也越来越乱,出现问题修改起来很痛苦,比如

看起来是不是绝望了。官方也发现了这个问题,所以引入了Promise。

Promise就是把异步函数转变成一个对象,这个对象有自己的属性以及方法。这个对象有着自己的状态生命周期,也有自己的功能方法。

Promise字面理解是约定的意思,这个约定可以被实现也可以被拒绝。举个简单的例子吧,朋友约我今晚去打撸啊撸,我今天下班就陪他去了,履行了约定。还有一种可能性是公司临时让我加班,我没时间去了,我只能失约了。

创建Promise

按照上面那个栗子,创建一个Promise代码如下

// 第一步,我们创建一个去玩lol的约定console.log('你下班陪我去打lol')const playLolPromise = new Promise(    function (resolve, reject) {        let workOvertime = true // 是否加班        setTimeout(() =&> {            console.log('到下班时间了')            if (workOvertime) { // 加班了                reject(new Error('我加班了')) // 数据处理出错            } else { // 没有加班                resolve(true) // 数据处理完成            }        }, 100)    })playLolPromise.then((res) =&> {    console.log('我没加班,我准时来了')    console.log('我成功守约')}).catch((e) =&> {    console.log('我没有守约,因为:' + e.message)}).finally(() =&> {    console.log('不管有没有守约,我都要通知你')})

没加班运行结果

你下班陪我去打lol到下班时间了我没加班,我准时来了我成功守约不管有没有守约,我都要通知你

加班运行结果

你下班陪我去打lol到下班时间了我没有守约,因为:我加班了不管有没有守约,我都要通知你

可以看出Promise通过new 关键字创建,创建的时候有两个参数reject和resolve,它两是一个方法,当需要成功守约的时候把结果传给resolve,如果要失约的话把原因传给reject。

Promise的三个状态

Promise有三个状态:

1、pending[约定好]初始状态,代表约定任务还没执行2、resolved[守约]代表守约了3、rejected[违约]代表违约了

promise状态只会变化一次,要么是从pending到resolved成功守约状态,要么是pending到rejected失约状态

resolve 守约

它的作用是将Promise对象的状态从“约定”变为“守约”(即从 pending 变为 resolved),在异步操作成功时调用,并将异步操作的结果,作为参数传递出并触发约定的then和finally方法.

reject 违约

作用是,将Promise对象的状态从“约定”变为“失约”(即从 pending 变为 rejected),在异步操作失败时调用,并将异步操作报出的错误,作为失败原因传递出去并触发约定的catch和finally方法。

Promise 的常用方法

Promise.resolve 现有对象转为Promise对象并完成守约

const promise = Promise.resolve('我没加班')// 等价于// const promise = new Promise(resolve =&> resolve('我没加班'))promise.then((res)=&>{    console.log('我守约了:'+res)  // 打印“我守约了:我没加班”})

Promise.reject 现有对象转为Promise对象并失约,并设置失约原因

const promise = Promise.reject('我加班了')// 等价于// const promise = new Promise((resolve,reject) =&> reject('我加班了'))promise.catch((reason)=&>{    console.log('我失约了:'+reason)  // 打印“我失约了:我加班了”})

Promise.all([p1,p2,p3&…]) 将多个Promise实例包装成一个新的Promise实例,并将结果合并为同序数组

成功和失败的返回值是不同,成功的时候返回的是一个结果数组,这个结果数组的顺序和传入的promise顺序一致,而失败的时候则只会返回最先被reject失败状态的值。

Promise.race([p1,p2,p3&….])将多个Promise实例包装成一个新的Promise实例,返回最快的结果,不过这个不常用

callback转成Promise

把fs.unlink转成Promise

let unlinkPromise = function(filePath) {   return new Promise(function(resolve, reject) {      fs.unlink(filePath, (err) =&> {         if(err) return reject(err);         return resolve();       })   }) }// 等价于const util = require('util')let unlinkPromise = util.promisify(fs.unlink);

最后

这一章我们我们需要重点掌握Promise的概念以及如何创建Promise,nodejs官方大力推荐Promise的解决方案,并提供了async 和await的语法糖来实现以同步的方式写异步方法.来让我们js代码看起来更舒服更容易维护.下一章我将教大家async 和await是如何与Promise搭配使用的.

“nodejs菜鸟安装教程(nodejs管理员方式运行)” 的相关文章

2020年非常有潜力的创业项目推荐,想创业的朋友看过来

大学生创业项目推荐很多想创业10多岁大学生创业项目的大学生,寻找创业项目的时候,首先考虑的是能不能赚钱,如果是最好的创业项目的话,哪一个能推荐给大学生呢?免费宣...

京东价保多长时间到账(详细介绍京东价保)

在京东购物的小伙伴们,注意啦!不必刻意的去追求双十一或者双十二。因为京东有价保服务。有的保七天,有的的保30天。也就是说在保障期限内,只要降价,他就会返差价给你...

大学生创新创业有哪些项目,5个适合大学生的靠谱项目推

95后的尹康去年毕业于重庆一个三本院校,毕业后找了一份月薪2000元的工作。“干了两个月就辞职了。这点钱什么时候才能买房买车?”他说,有段时间陷入了迷茫,母亲看...

如何实现中国梦,青少年实现中国梦的方法

实现中国梦必须凝聚中国力量,中国力量就是人民的力量。中国梦是亿万人民的梦,没有全社会的共同参与、各阶层的同心同德,任何梦想都是不能实现的。实现中国梦,创造全体人...

信息流广告设计是做什么的(分享信息流广告优秀案例)

一,互联网信息流广告基本信息互联网崛起带动了很多行业的变革,广告行业也不例外,互联网广告与传统媒体广告相比,具有精准性,即时性,互动性,扩散性,整个性以及可测试...

win10系统壁纸怎么设置(设置win10壁纸的实操教程)

有不少深度技术的用户都不喜欢Windows10系统中,自带的桌面win10壁纸,在网上下载的不少壁纸又不够清晰,要如果设置高清壁纸呢?其实,这个问题真的很容易解...

qq群营销有哪些技巧,具体推广方式请看本篇

注册新QQ号加群,也可以淘宝购买QQ,查找精准定位QQ群,比如母婴QQ群,手动加群每天不超过20个,加群限制是iP,封掉,限制QQ不能加群、建议每个QQ一次加3...

什么路由器好用,这五款是目前最顶级的路由器

双11和双12都过去了,不知道显示器前的你剁手了没?别误会,这次不是给大家做产品推荐,而是又到了我们年底的路由器简评时间。不过这次我们给大家带来的是六款纯粹纯粹...

三星2020年手机报价,三星Note 10价格及参数对比

2019年12月22日,据gsmarena消息,三星GalaxyNote105G白色版将在韩国智能手机市场开售,价格为1124500韩元(约合人民币6800元)...

sql语句获取当前时间的函数(sql查询语句大全及实例)

今天是SQL知识大全的第五讲,主要内容是和时间函数相关,主要包括了常用的时间函数,时间提取函数,时间计算函数以及时间和时间戳之间的转换。常用的时间函数to_da...