node.js之Promise初见

在node.js中,回调函数的多重嵌套可能会导致代码难以维护。因此,我们借助Promise来封装异步函数,使用统一的链式API来避免函数不断的嵌套匿名函数,脱离这多重回调的麻烦,使代码可读性更强。

简单来说,Promise就是把函数的嵌套改成了并列,使其代码更友好。

Promise对象一般有三种状态:Pending(未完成),Fulfilled(操作成功),Rejected(操作失败)

说说他的一些常用方法:

①then()方法:

then(onFulfilled,onRejected)方法接收两个参数,一般是两个函数,这两个函数是异步执行的,第一个参数用来处理操作成功后的结果,第二个参数用来处理操作失败后的原因。then()方法返回值是一个Promise对象,这一特点使得我们可以通过链式调用then()来达到控制流程的效果。关于then()方法函数的一些细节:

onFullfilled或onRejected函数的返回值如果不是Promise对象,则该值将作为下一个then方法中onFulfilled方法的第一个参数;如果是,则then()方法的返回值为该Promise对象

onFullfilled或onRejected函数若有异常抛出,则该then()方法返回的Promise对象的状态变为Rejected,如果Promise对象调用该then()对象,则该error对象会作为onRejected函数的第一个参数

如果Promise对象的状态变为fulfilled并且then()方法中没有提供onFulfilled函数,则then()方法返回的Promise对象状态仍为fulfilled且成功的结果为上一个Promise的结果。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个使用 Node.js 和 MongoDB aggregate 的新 Promise 封装示例: ```javascript const MongoClient = require('mongodb').MongoClient; function aggregatePromise(dbUrl, dbName, collectionName, pipeline) { return new Promise((resolve, reject) => { MongoClient.connect(dbUrl, { useNewUrlParser: true }, (err, client) => { if (err) { reject(err); } const db = client.db(dbName); const collection = db.collection(collectionName); collection.aggregate(pipeline).toArray((err, result) => { if (err) { reject(err); } resolve(result); client.close(); }); }); }); } ``` 使用示例: ```javascript const dbUrl = 'mongodb://localhost:27017'; const dbName = 'test'; const collectionName = 'users'; const pipeline = [ { $match: { age: { $gte: 18 } } }, { $group: { _id: '$gender', count: { $sum: 1 } } } ]; aggregatePromise(dbUrl, dbName, collectionName, pipeline) .then(result => console.log(result)) .catch(err => console.error(err)); ``` 这个示例使用了 MongoDB 的聚合操作,查询年龄大于等于 18 岁的用户并按性别分组统计人数。我们封装了一个名为 `aggregatePromise` 的函数,它接收四个参数,分别是 MongoDB 连接地址、数据库名、集合名和聚合管道。这个函数返回一个 Promise 对象,可以使用 `.then()` 和 `.catch()` 方法处理异步操作的结果和错误。在函数内部,我们使用了 MongoDB 官方提供的 Node.js 驱动程序,连接到指定的数据库,查询指定集合的数据并返回结果。注意,在最后一行代码中,我们调用了 `client.close()` 方法关闭了连接,以避免资源泄漏。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值