Promise操作mongosedb数据库时的简单使用

// https://www.runoob.com/w3cnote/javascript-promise-object.html
// Promise 对象代表了未来将要发生的事情,用来传递异步操作的消息.
// Promise对象有以下两个特点,
// 1.对象的状态不受外界影响,promise对象代表一个异步操作,有三种状态
// (1)pending:初始状态,不是成功或失败状态
// (2)fulfilled:意味着操作成功完成
// (3)rejected:意味着操作失败

// 2.一旦状态改变,就不会在变,任何时候都可以得到这个结果。promise对象的状态,只有两种可能
:从Pending变为Resolved
// 和Pending变为Rejected
// Promise创建
const p1 = new Promise((resolve, reject) => {
    //异步处理
    //处理结束后,调用resolve或reject  
})

//异步任务对象,用于将一个异步任务封装成一个对象
const p1 = new Promise(function (resolve, reject) {
    fs.readFile("./1.txt", function (err, data) {
        if (err != null) {
            //当异步任务执行失败时,调用reject,promise对象就会变成失败状态
            reject(err)
            return
        }
        //当异步任务执行成功时,调用resolve,调用resolve,promise对象就会变为成功状态,
        // 可以成功将信息传入
        resolve(data)
    })
})
const p2 = new Promise(function (resolve, reject) {
    fs.readFile("./2.txt", function (err, data) {
        if (err != null) {
            reject(err)
            return
        }
        resolve(data)
    })
})
// Promise.all()方法,用于将多个promise对象合并为一个总的promise
// ,参与合并的promise都处于成功状态时,总promise才会进入成功状态
const p3 = Promise.all([p1, p2])
p3.then((data) => {
    // 参数data是一个数组,数组中分别存参数合并每个promise.resolve传递的值
    console.log(data)
})
//只要p3对象中存储的Promise中有一个出错就会进入catch函数
// p3.catch((err)=>{
//     console.log(err)
// })
// p1.then((data)=>{
//     console.log(data.toString())
//     console.log("执行成功")
// })
// p1.catch((err)=>{
//     console.log(err)
//     console.log("执行失败")
// })
高级写法
// 可以在任何时候通过.then()或.catch()获取promise状态,执行处理函数
// 异步任务函数可以直接返回一个promise对象
function redMyFile(filePath) {
    return new Promise((resolve, reject) => {
        fs.readFile(filePath, (err, data) => {
            if (err != null) {
                reject(err)
                return
            }
            resolve(data)
        })
    })
}
const p4 = Promise.all([redMyFile("./1.txt"), redMyFile("./2.txt")])
p4.then((data) => {
    // console.log("加载完毕"+`${data}`)
    console.log("22222")

    console.log(data.toString())
})






  const p1 = new Promise((resolve, reject) => {
        clothDAO.updateOne({ _id: req.query.clothData_id }, { $set: { isSendF: false } 
        }, function (err) {
          console.log("clothDAO数据表更改成功")
          if (err != null) {
            reject(err)
            return
          }
          resolve()
        })
      })

      const p2 = new Promise((resolve, reject) => {
        FormDAO.updateOne({ _id: req.query.formData_id }, upDataFormObj, (err) => {
          console.log("clothDAO数据表更改成功")
          if (err != null) {
            reject(err)
            return
          }
          resolve()
        })
      })
      const p3 = Promise.all([p1, p2])
      p3.then(() => {
        console.log(req.query)

        res.redirect("/open/FormInfoPanelEvnet?formData_id=" + req.query.formData_id + 
        "&" + "clothData_id=" + req.query.clothData_id)
        return
      })

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值