欢迎来到皮皮网官网

【树品源码】【android源码编译反思】【linux 小游戏源码】naomi源码

时间:2024-12-23 04:26:11 来源:如果看mono源码

1.Node.js如何对SQLite的async/await封装详解

naomi源码

Node.js如何对SQLite的async/await封装详解

        前言

       本文主要给大家介绍的是关于Node.js对SQLite的async/await封装的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的树品源码介绍吧

       用于将每个SQLite函数同步化,并可以用await的接口。

       注意:需要SQLite for Node模块和Node.js 8.0+,android源码编译反思并支持async / await。

       SQLite最常用作本地或移动应用程序的存储单元,当需要从程序的各个部分访问数据时,回调不是最佳解决方案。

       为了在程序程序中更自然地访问数据,我编写了一个将回调转换为promises的接口,因此我们可以将每个函数与await关键字一起使用。linux 小游戏源码 它不是异步函数的替代品,它是一个补充,可以将原始函数和同步函数一起使用。易语言amf源码

       aa-sqlite模块

       SQLite的接口是一个名为aa-sqlite的模块,您必须将其存储在应用程序的node_modules部分中。这是unix环境源码编译完整的源代码

       const sqlite3 = require('sqlite3').verbose()

       var db

       exports.db = db

       exports.open=function(path) {

        return new Promise(function(resolve) {

        this.db = new sqlite3.Database(path,

        function(err) {

        if(err) reject("Open error: "+ err.message)

        else resolve(path + " opened")

        }

        )

        })

       }

       // any query: insert/delete/update

       exports.run=function(query) {

        return new Promise(function(resolve, reject) {

        this.db.run(query,

        function(err) {

        if(err) reject(err.message)

        else resolve(true)

        })

        })

       }

       // first row read

       exports.get=function(query, params) {

        return new Promise(function(resolve, reject) {

        this.db.get(query, params, function(err, row) {

        if(err) reject("Read error: " + err.message)

        else {

        resolve(row)

        }

        })

        })

       }

       // set of rows read

       exports.all=function(query, params) {

        return new Promise(function(resolve, reject) {

        if(params == undefined) params=[]

        this.db.all(query, params, function(err, rows) {

        if(err) reject("Read error: " + err.message)

        else {

        resolve(rows)

        }

        })

        })

       }

       // each row returned one by one

       exports.each=function(query, params, action) {

        return new Promise(function(resolve, reject) {

        var db = this.db

        db.serialize(function() {

        db.each(query, params, function(err, row) {

        if(err) reject("Read error: " + err.message)

        else {

        if(row) {

        action(row)

        }

        }

        })

        db.get("", function(err, row) {

        resolve(true)

        })

        })

        })

       }

       exports.close=function() {

        return new Promise(function(resolve, reject) {

        this.db.close()

        resolve(true)

        })

       }

       使用示例

       下面的示例展示了aa-sqlite的每个功能的示例。在第一部分中,我们打开一个数据库,添加一个表并用一些行填充该表。然后关闭数据库,我们再次打开它并执行一些同步查询。

       const fs = require("fs")

       const sqlite = require("aa-sqlite")

       async function mainApp() {

        console.log(await sqlite.open('./users.db'))

        // Adds a table

        var r = await sqlite.run('CREATE TABLE users(ID integer NOT NULL PRIMARY KEY, name text, city text)')

        if(r) console.log("Table created")

        // Fills the table

        let users = {

        "Naomi": "chicago",

        "Julia": "Frisco",

        "Amy": "New York",

        "Scarlett": "Austin",

        "Amy": "Seattle"

        }

        var id = 1

        for(var x in users) {

        var entry = `'${ id}','${ x}','${ users[x]}'`

        var sql = "INSERT INTO users(ID, name, city) VALUES (" + entry + ")"

        r = await sqlite.run(sql)

        if(r) console.log("Inserted.")

        id++

        }

        // Starting a new cycle to access the data

        await sqlite.close();

        await sqlite.open('./users.db')

        console.log("Select one user:")

        var sql = "SELECT ID, name, city FROM users WHERE name='Naomi'"

        r = await sqlite.get(sql)

        console.log("Read:", r.ID, r.name, r.city)

        console.log("Get all users:")

        sql = "SELECT * FROM users"

        r = await sqlite.all(sql, [])

        r.forEach(function(row) {

        console.log("Read:", row.ID, row.name, row.city)

        })

        console.log("Get some users:")

        sql = "SELECT * FROM users WHERE name=?"

        r = await sqlite.all(sql, ['Amy'])

        r.forEach(function(row) {

        console.log("Read:", row.ID, row.name, row.city)

        })

        console.log("One by one:")

        sql = "SELECT * FROM users"

        r = await sqlite.each(sql, [], function(row) {

        console.log("Read:", row.ID, row.name, row.city)

        })

        if(r) console.log("Done.")

        sqlite.close();

       }

       try {

        fs.unlinkSync("./users.db")

       }

       catch(e) {

       }

       mainApp()

       由于all方法返回一个row数组,我们使用forEach来处理每一行的内容。

       你可以在每个方法的情况下进行验证,即在程序显示“完成”之前处理返回的每一行。原始异步方法不会出现这种情况。

       参考并翻译自:/sql/sqlite-async-await.php

       总结

copyright © 2016 powered by 皮皮网   sitemap