2

我在 React-native 中使用 sqlite (react-native-sqlite-storage) 并且在我想关闭数据库时遇到了 promise 的问题:

    this.dataUsuarios= await fetchData(this.url);    
    db = await openDB();
    await this.insertarDatos();
    db.close();

问题是当执行 db.close 时它给了我一个问题,因为 this.insertarDatos() 仍在处理但不知道为什么。我认为我的新承诺应该奏效!

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

1 回答 1

0

截至撰写本文时,这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;
};

于 2020-11-30T00:35:05.900 回答