// 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
})
Promise操作mongosedb数据库时的简单使用
最新推荐文章于 2023-12-17 10:00:00 发布