异步函数出现问题:tx.executeSql()

时间:2019-05-19 00:02:10

标签: javascript reactjs asynchronous async-await

我对异步函数有问题:tx.executeSql()。我正在做for(),但是由于tx.execute异步,所以我的var无法按照我期望的方式工作。

当我执行查询时,变量i始终为3(我的this.state.datausuarios数组的最后一个数字),您可以在控制台中看到它。所以这不太好...

我正在使用React Native,但我使用了常见的asyn / await函数,但在这种情况下我不知道如何实现

insertarDatos = async () =>{
    console.log('COMIENZA insertarDatos');
     await db.transaction((tx) => {
       console.log('Comienza Transaction');
        for(i in this.state.dataUsuarios){
          const sql = `INSERT INTO usuarios VALUES (
            '${this.state.dataUsuarios[i].id}', 
            '${this.state.dataUsuarios[i].nombre}',
            '${this.state.dataUsuarios[i].usuario}',
            '${this.state.dataUsuarios[i].password}',
            '${this.state.dataUsuarios[i].grupo}',
            '${this.state.dataUsuarios[i].faenas}'
          )`;
          console.log('antes de excute i es: ' + i);
          tx.executeSql(sql, [], (tx, results) => {
           console.log('dentro de executesql i es: ' + i);
            if(results.rowsAffected > 0){
              console.log('¡Datos insertados en BD!');
            }else{
              console.log('¡No se puedieron insertar datos en la BD!');
            }(error) => {
            console.log(error.message);
            }
          });
        }
        console.log('termina transaccion');
    });

    console.log('TERMINA insertarDatos');

  }

我的控制台退出:

TERMINO openBD
C:\Users\josen\React-Projects\GeslubApp\src\Screen\Login.js:22 COMIENZA insertarDatos
C:\Users\josen\React-Projects\GeslubApp\src\Screen\Login.js:84 Comienza Transaction
C:\Users\josen\React-Projects\GeslubApp\src\Screen\Login.js:84 antes de excute i es: 0
C:\Users\josen\React-Projects\GeslubApp\src\Screen\Login.js:84 antes de excute i es: 1
C:\Users\josen\React-Projects\GeslubApp\src\Screen\Login.js:84 antes de excute i es: 2
C:\Users\josen\React-Projects\GeslubApp\src\Screen\Login.js:84 antes de excute i es: 3
C:\Users\josen\React-Projects\GeslubApp\src\Screen\Login.js:104 termina transaccion
C:\Users\josen\React-Projects\GeslubApp\src\Screen\Login.js:108 TERMINA insertarDatos
dc0e3583-a57a-4389-8dbd-5201b5fa6f2c:92968 *TERMINA componentDidMount
C:\Users\josen\React-Projects\GeslubApp\src\Screen\Login.js:87 dentro de executesql i es: 3
C:\Users\josen\React-Projects\GeslubApp\src\Screen\Login.js:89 ¡Datos insertados en BD!
C:\Users\josen\React-Projects\GeslubApp\src\Screen\Login.js:87 dentro de executesql i es: 3
C:\Users\josen\React-Projects\GeslubApp\src\Screen\Login.js:89 ¡Datos insertados en BD!
C:\Users\josen\React-Projects\GeslubApp\src\Screen\Login.js:87 dentro de executesql i es: 3
C:\Users\josen\React-Projects\GeslubApp\src\Screen\Login.js:89 ¡Datos insertados en BD!
C:\Users\josen\React-Projects\GeslubApp\src\Screen\Login.js:87 dentro de executesql i es: 3
C:\Users\josen\React-Projects\GeslubApp\src\Screen\Login.js:89 ¡Datos insertados en BD!

0 个答案:

没有答案