//Node.js+Vue+MongoDB,因操作数据库时第二步需要第一步执行完后返回的结果,又因第一步insert和第二步update均是异步方法,故分两步,利用计时器中断等待第一步出结果后再进行第二步 let buy_order_id = '';
MongoClient.connect(MonGoIP, function (err, db) { if (err) { Res_ERR(res, "116数据库操作--连接失败"); return; } const colls = db.db("***").collection("data"); colls.insertOne(buy_order).then((data) => { buy_order_id = data.insertedId; //取本次插入文档的ID Suc_Flg = 1; console.log("115数据库操作--保存采购单成功"); }).catch(() => { console.log("116数据库操作--保存采购单失败"); Suc_Flg = 0; }) let timer = setInterval(() => { if (Suc_Flg == 1) { clearInterval(timer); db.close(); //添加采购单成功,进行下一步操作(更新材料状态),把上次插入文档的ID:buy_order_id带到下次的数据库操作 update_CaiLiao_status(ids, buy_order_id, Suc_Flg, res); } else if (Suc_Flg == 0) { clearInterval(timer); db.close(); Res_ERR(res, "117数据库操作--保存采购单失败"); } }, 5) //定时器时隔5豪秒 }) }) let num = 0; MongoClient.connect(MonGoIP, function (err, db) { if (err) { Res_ERR(res, "118数据库操作--连接失败"); return; } const colls = db.db("***").collection("data"); for (index in ids) { let update_colls = { $set: { 状态: "待入库", 采购申请单ID: buy_order_id } }; //引用上次上次插入文档的ID:buy_order_id colls.updateOne({ _id: ObjectId(ids[index]) }, update_colls).then(() => { console.log("119数据库操作--更新材料成功"); Suc_Flg = 3; num++; }).catch(() => { console.log("120数据库操作--更新材料失败"); Suc_Flg = 2; }) } let sendtime = setInterval(() => { if (Suc_Flg == 3 && num == ids.length) { clearInterval(sendtime); db.close(); Res_SUCC(res, "121数据库操作--更新材料成功"); } else if (Suc_Flg == 2) { clearInterval(sendtime); db.close(); Res_ERR(res, "122数据库操作--更新材料失败"); } }, 5) //定时器时隔5豪秒 }) } function Tip(Msg) { console.log(Msg); } function Res_SUCC(res, myMsg) { console.log(myMsg); if (res != undefined) res.send({ meta: { status: 200, message: myMsg } }); } function Res_ERR(res, myMsg) { console.log(myMsg); if (res != undefined) res.send({ meta: { status: 404, message: myMsg } }); } |