Node.js+Vue+MongoDB,因操作数据库时第二步需要第一步执行完后返回的结果,又因第一步insert和第二步update均是异步方法,故分两步,利用计时器中断等待第一步出结果后再进行第二步

//Node.js+Vue+MongoDB,因操作数据库时第二步需要第一步执行完后返回的结果,又因第一步insert和第二步update均是异步方法,故分两步,利用计时器中断等待第一步出结果后再进行第二步

  
  let Suc_Flg = 5; //5:初始值 0:保存采购单失败,1:保存采购单成功,2更新材料失败,3更新材料成功。

    let buy_order_id = '';


//第一步数据库操作insert

    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豪秒

    })

})

//数据库第二步操作update
//更新材料状态
function update_CaiLiao_status(ids, buy_order_id, Suc_Flg, res) {

    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 } });

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值