我正在开发本机应用程序,我试图使用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):