Javascript 新承诺不适用于db.transaction
我正在使用react-native中的sqlite(react-native sqlite存储),我在关闭数据库时遇到了一个问题:Javascript 新承诺不适用于db.transaction,javascript,async-await,react-native-sqlite-storage,Javascript,Async Await,React Native Sqlite Storage,我正在使用react-native中的sqlite(react-native sqlite存储),我在关闭数据库时遇到了一个问题: this.dataUsuarios= await fetchData(this.url); db = await openDB(); await this.insertarDatos(); db.close(); 问题是,当执行db.close时,它给了我一个问题,因为这个.insertarDatos()仍在处理,但idk
this.dataUsuarios= await fetchData(this.url);
db = await openDB();
await this.insertarDatos();
db.close();
问题是,当执行db.close时,它给了我一个问题,因为这个.insertarDatos()仍在处理,但idk为什么。我想我的新承诺应该行得通
insertarDatos = () =>{
return new Promise((resolve, rejection)=>{
db.transaction((tx) => {
for(let i in this.dataUsuarios){
const sql = `INSERT INTO usuarios VALUES (
${this.dataUsuarios[i].id},
'${this.dataUsuarios[i].nombre}',
'${this.dataUsuarios[i].usuario}',
'${this.dataUsuarios[i].password}',
${this.dataUsuarios[i].grupo},
'${this.dataUsuarios[i].faenas}'
);`;
tx.executeSql(sql, [], this.successCB(i), this.errorCB);
}
},resolve,rejection);
});
}
在编写本
db.transaction
时,首先回拨错误,在这里传递resolve
以下是一个例子:
// sqlite transactions don't play with promises nicely.
// the fn param here shouldn't use promises.
const transactional = async (fn: (tx: Transaction) => void) => {
const db = await getDb();
const x = new Promise((resolve, reject) => {
const trans = db.transaction(fn, (e) => {
console.log('transaction failed ')
reject(e)
},
() => {
console.log('transaction finished ok')
resolve();
});
});
await x;
};
在编写本
db.transaction
时,首先回拨错误,在这里传递resolve
以下是一个例子:
// sqlite transactions don't play with promises nicely.
// the fn param here shouldn't use promises.
const transactional = async (fn: (tx: Transaction) => void) => {
const db = await getDb();
const x = new Promise((resolve, reject) => {
const trans = db.transaction(fn, (e) => {
console.log('transaction failed ')
reject(e)
},
() => {
console.log('transaction finished ok')
resolve();
});
});
await x;
};
transaction
本身是否已返回承诺?这似乎不是承诺的问题,在使用回调样式时是否有效?不幸的是,transaction
的文档记录非常糟糕-我看不到任何迹象表明它在等待处理完成。如果您使用的是类似于this.insertarDatos()的方法,请吹毛求疵代码>并且不将其作为道具传递给子组件,最好像insertarDatos(){…}
这样声明方法,这样它就不会为组件的每个实例制作函数的副本。只是一个猜测,但我想您需要像返回新承诺((r,j)=>tx.executeSql那样一路“promisify”(sql,[],()=>{this.successCB(i)(;r();},()=>{this.errorCB();j();}))
事务本身没有返回承诺吗?这似乎不是承诺的问题,当您使用回调样式时它是否工作?不幸的是事务
的文档记录非常糟糕-我看不到任何迹象表明它等待处理完成。如果您使用类似的方法,请吹毛求疵this.insertarDatos();
并且不要将它作为道具传递给子组件,最好像insertarDatos(){…}
这样声明方法,这样它就不会为组件的每个实例制作函数的副本。只是一个猜测,但我可以想象您需要像返回新承诺一样一直“promisify”((r,j)=>tx.executeSql(sql,[],()=>{this.successCB(i)(;r();},()=>{this.errorCB();j();}));