哥萨克3:中文免安装破解版
大家好,今天我给大家介绍一款备受瞩目的即时战略游戏《哥萨克3》中文免安装破解版...
2024-02-29
实现nodejs的非阻塞IO就需要异步函数,之前我们讲了异步的几种实现方案。其中就说到了Promise的方案,这章呢我们详细的讲一讲Promise方案的详细用法,以及为什么nodejs要提供一个Promise。
之前我们遇到了callback方法过多的话会形成回调地狱问题,这时我们的代码就形成了一层一层的回调嵌套,就像洋葱一样。这时候变量作用域也不清晰了,执行时序问题也越来越乱,出现问题修改起来很痛苦,比如

看起来是不是绝望了。官方也发现了这个问题,所以引入了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状态只会变化一次,要么是从pending到resolved成功守约状态,要么是pending到rejected失约状态
resolve 守约
它的作用是将Promise对象的状态从“约定”变为“守约”(即从 pending 变为 resolved),在异步操作成功时调用,并将异步操作的结果,作为参数传递出并触发约定的then和finally方法.
reject 违约
作用是,将Promise对象的状态从“约定”变为“失约”(即从 pending 变为 rejected),在异步操作失败时调用,并将异步操作报出的错误,作为失败原因传递出去并触发约定的catch和finally方法。
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实例,返回最快的结果,不过这个不常用
把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管理员方式运行)最佳回答,如果还想搜索其他问题,请收藏本网站或点击搜索更多问题
内容来源于网络仅供参考版权声明:所有来源标注为小樱知识网www.xiaoyin02.com的内容版权均为本站所有,若您需要引用、转载,只需要注明来源及原文链接即可。
本文标题:nodejs菜鸟安装教程(nodejs管理员方式运行)
本文地址:https://www.xiaoyin02.com/shcs/118845.html
相关文章
最近,某推超火爆的Fate:尘埃帝国终于完结了!如果你是这个系列的忠实粉丝,那么我有一个好消息要告诉你——我找到了一个完美的视频资源,让你一次...
2023-11-29
热点文章
2021年独生子女补贴新政策是真的吗(独生子女证有有效期吗)
2021年国庆节阅兵仪式几点开始几点结束(2021年国庆节还有阅兵吗)
鼠目寸光一点红是什么生肖动物(鼠目寸光一点红)指什么生肖,紧密
k0到k9的玩法大全(强制gc的玩法和注意事项)
入土为安是什么生肖《入土为安》打一个生肖动物,词语解释
浙江12月底全面停工是真的吗(浙江什么时候放假停工)
如何做t(t怎么把p做哭)
北京口碑最差的三甲医院(北京301医院最擅长什么)