gpt4 book ai didi

javascript - 我如何让我的 javascript 函数等待 WebSql 事务完成后再继续

转载 作者:行者123 更新时间:2023-11-28 03:11:14 25 4
gpt4 key购买 nike

我创建了一个验证函数来查看该值是否在数据库表中。即使该值存在于表中,该函数也始终返回 true。我还尝试通过仅更改变量值来返回 false,但这不会等待它,因此函数立即返回到“if”,然后 alert("Not in use")

function Rval(Username,Displayname,Email){

db.transaction(function (tx) {
tx.executeSql("SELECT UserName FROM Users WHERE UserName='" + Username.value + "'", [], function (tx, results) {
if (results.rows.length > 0) {
return false
}
}, null);
tx.executeSql("SELECT Email FROM Users WHERE Email='" + Email.value + "'", [], function (tx, results) {
if (results.rows.length > 0) {
return false
}
}, null);
tx.executeSql("SELECT DisplayName FROM Users WHERE DisplayName='" + Displayname.value + "'", [], function (tx, results) {
if (results.rows.length > 0) {
return false
}
}, null);
});
}



if (Rval(Username,Displayname,Email))
{
alert("Not in use")
}
else
{
alert("In use")
}

最佳答案

类似这样的事情。

const userQ = ({field, value, tx}) => 
new Promise((resolve) =>
tx.executeSql(`SELECT ${field} FROM Users WHERE ${field}='${value}'`, [], (tx,results) => resolve(!results.rows.length), null))

const getTx = (db) => new Promise((resolve) => db.transaction((tx) => resolve(tx)))

async function inUse(userName, displayName, email) {
const tx = await getTx(db)
const [a,b,c] = await Promise.all([
userQ({field:'UserName', value:userName, tx}),
userQ({field:'DisplayName', value:displayName, tx}),
userQ({field:'Email', value:email, tx})
])
return a && b && c
}

inUse(username, displayname, email).then((result) => {
if (result) {
alert("Not in use")
} else {
alert("In use")
}
})

关于javascript - 我如何让我的 javascript 函数等待 WebSql 事务完成后再继续,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60101320/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com