成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

NodeMysql事務(wù)處理封裝

node回調(diào)函數(shù)的方式使得數(shù)據(jù)庫(kù)事務(wù)貌似并沒有像java、php那樣編寫簡(jiǎn)單,網(wǎng)上找了一些事務(wù)處理的封裝并沒有達(dá)到自己預(yù)期的那樣簡(jiǎn)單編寫,還是自己封裝一個(gè)吧。
封裝的大體思路很簡(jiǎn)單:函數(shù)接受一個(gè)事務(wù)處理的函數(shù),如何處理事務(wù)的邏輯由該函數(shù)確定,而不是像網(wǎng)上封裝的事務(wù)是對(duì)組裝多條預(yù)處理SQL和參數(shù)。該事務(wù)處理函數(shù)要求返回Promise。這樣我們就可以通過(guò)該P(yáng)romise來(lái)確定是提交事務(wù)還是回滾事務(wù)了。
根據(jù)上述思路,實(shí)現(xiàn)代碼:

創(chuàng)新互聯(lián)是專業(yè)的沙坪壩網(wǎng)站建設(shè)公司,沙坪壩接單;提供成都網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè),網(wǎng)頁(yè)設(shè)計(jì),網(wǎng)站設(shè)計(jì),建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行沙坪壩網(wǎng)站開發(fā)網(wǎng)頁(yè)制作和功能擴(kuò)展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團(tuán)隊(duì),希望更多企業(yè)前來(lái)合作!

let MySQL = require('mysql')
let config = require('../config')

let pool = mysql.createPool(config.database) //config.databa數(shù)據(jù)庫(kù)配置
let trans = (tran) => {
    return new Promise((resolve, reject) => {  //返回promise提供事務(wù)成功與失敗的接口
        pool.getConnection((err, conn) => {
            if(err) {
                reject(err)
            }else {
                conn.beginTransaction((err) => { //開始事務(wù)處理
                    if(err) {
                        conn.release()
                        reject(err)
                    }else {
                        let promise = tran(conn)  //調(diào)用事務(wù)處理函數(shù)
                        promise.then(result => {
                            conn.commit(err => {  //事務(wù)處理函數(shù)resolve則提交事務(wù)
                                if(err) {
                                    reject(err)
                                }else {
                                    resolve(result)
                                }
                            })
                        }).catch(err => {
                            conn.rollback(() => {  //事務(wù)處理函數(shù)reject則回滾事務(wù)
                                conn.release()
                                reject(err)
                            })
                        })
                    }
                })
            }
        })
    })
}

事務(wù)處理函數(shù)接受數(shù)據(jù)庫(kù)連接對(duì)象conn,這里我封裝了數(shù)據(jù)庫(kù)執(zhí)行語(yǔ)句:

trans.query = (conn, sql, params) => {
    return new Promise((resolve, reject) => {
        conn.query(sql, params,(err, result) => {
            if(err) {
                reject(err)
            }else {
                resolve(result)
            }
        })
    })
}

上面事務(wù)處理封裝完成,應(yīng)用就和正常Promise使用相同:

trans((conn) => {
             return trans.query(conn, db_user.register.user, [username, password, new Date().getTime()])
                     .then(result => {
                             return trans.query(conn,db_user.login, [username])
                     }).then(result => {
                             return trans.query(conn,db_user.register.profile,[result[0].id, nickname])
                        })
     }).then(result=>{
         console.log(‘事務(wù)提交成功’)
     }).catch(err => {
         console.log(‘事務(wù)提交失敗’)
     })

上述案例是我截取項(xiàng)目的一段代碼,從上面代碼顯然可以很容易封裝自己的邏輯,可以執(zhí)行不同路徑的事務(wù)流程。

當(dāng)前題目:NodeMysql事務(wù)處理封裝
當(dāng)前URL:http://jinyejixie.com/article14/ghhsde.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)建站網(wǎng)頁(yè)設(shè)計(jì)公司、微信公眾號(hào)、關(guān)鍵詞優(yōu)化、全網(wǎng)營(yíng)銷推廣軟件開發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

小程序開發(fā)
临泉县| 徐闻县| 噶尔县| 东源县| 巴楚县| 苏尼特左旗| 合作市| 海兴县| 南京市| 德惠市| 昌图县| 府谷县| 内江市| 都江堰市| 沁水县| 台南县| 天峻县| 涟源市| 古田县| 承德市| 威海市| 嵩明县| 黑山县| 布拖县| 孟村| 徐汇区| 金阳县| 西宁市| 黄浦区| 马山县| 威信县| 云林县| 蒙自县| 眉山市| 贵州省| 米易县| 莒南县| 伊川县| 邳州市| 乐都县| 广水市|