反应本机异步SQlite操作

时间:2018-07-30 08:18:26

标签: reactjs sqlite react-native react-redux redux-thunk

我正在开发本机应用程序,我试图使用Axios lib调用Web服务,然后有一点我试图将数据保存到SQLite DB 但是我希望该数据库操作是异步的。但是执行完数据库功能后,我的redux thunk调度将立即调用而无需等待SQLite操作完成。 以下是带有调度

的动作创建者
export const salesmanLogin=({username, password})=>{

  console.log(getApiCall(username,password));
  return (dispatch)=>{
      dispatch({ type: LOGIN_USER });
      axios.get(getApiCall(username,password))
      .then(response => {
            console.log(response);
            if(response.data.length>0){
            let data=response.data[0];
            if(data.STATUS==1){
                  loginUserFail(dispatch,'Please Enter Correct User Name or password');
            }else if(data.STATUS==2){
                  loginUserFail(dispatch,'User Is Trying To Login From The Wrong Device.Device id');
            }else if(data.STATUS==3){
                  loginUserFail(dispatch,'No Devices Assigned To This User.Device id');
            }else if(data.STATUS==0){
                  var connection=Database.getConnection();
                  var res=Sqlite.saveSalesmanData(connection,data);

                  loginUserSuccess(dispatch,'Logged In..');
            }

          }else{
            loginUserFail(dispatch,'error in login');
          }
      });

  };

}

const loginUserSuccess = (dispatch, response) => {
  console.log("Success Called");
  dispatch({
    type: LOGIN_USER_SUCCESS,
    payload: response
  });
  Actions.main();
};

要执行的数据库功能

getSalesmanData(db,data){

      return new Promise((resolve, reject) => {
            db.transaction(function (txn) {
                txn.executeSql('SELECT * FROM salesman', [], function (tx, res) {
                      resolve(res);
                });
           });
     }, null, null);

    }

如果我在没有承诺的情况下使用上述函数,则它可以正常工作,但无需等待就可以调用dispatch。 并保证我会在错误以下

  

可能的未处理的承诺拒绝(id:0):

0 个答案:

没有答案