I have a function that calls another function and I’m using promisse. Why does not the function wait for the other to finish to return the success (data)? It runs the date even before the loop (for) finishes it in the other function.
public cargaItens(){
this.itensProcessados = "Processando...";
this.webservice.carga(this.loja, this.dataitens, this.horaitens, this.servidor)
.then(
(data) => {
this.itens = data.itens;
return this.database.salvaCarga(this.itens)
.then(
(data) => {
this.itensProcessados = "Carga realizada com sucesso";
},
(error) => {
this.itensProcessados = "Erro ao fazer carga";
this.database.presentToastError(JSON.stringify(error));
}
)
},
(error) => {
this.database.presentToastError(JSON.stringify(error));
}
)
}
FUNCTION 2:
public salvaCarga(itens){
return new Promise((resolve, reject) => {
this.storage = new SQLite();
this.storage.openDatabase({name: "infosysDB.db", location: "default"})
.then(
(data) => {
for(let i=0;i<=itens.length-1;i++){
let codigo = itens[i].codigo;
this.storage.executeSql("SELECT codigo FROM itensoffline WHERE codigo = ?", [codigo])
.then(
(data) => {
let codigoitem = itens[i].codigo;
let descricao = itens[i].descricao;
let precodevenda = itens[i].precovenda;
let precoprazo = itens[i].precoprazo;
let precosugerido = itens[i].precosugerido;
let precoatacado = itens[i].precoatacado;
let precocma = itens[i].precocma;
let precocompra = itens[i].precocompra;
let estoque = itens[i].estoque;
if(data.rows.length > 0){
this.storage.executeSql("UPDATE itensoffline SET codigo = ?, descricao = ?, precodevenda = ?, "+
"precoprazo = ?, precosugerido = ?, precoatacado = ?, precocma = ?, "+
"precocompra = ?, estoque = ? WHERE codigo = ?",
[codigo, descricao, precodevenda, precoprazo, precosugerido, precoatacado,
precocma, precocompra, estoque, codigoitem])
.then(
(data) => {
// this.presentToastError(JSON.stringify(data));
resolve(data);
},
(error) => {
this.presentToastError(JSON.stringify(error));
reject(error);
}
)
}else{
this.storage.executeSql("INSERT INTO itensoffline (codigo, descricao, precodevenda, precoprazo, precosugerido, precoatacado, precocma, precocompra, estoque) VALUES (?,?,?,?,?,?,?,?,?)", [codigo, descricao, precodevenda, precoprazo, precosugerido, precoatacado, precocma, precocompra, estoque])
.then(
(data) => {
// this.presentToastError(JSON.stringify(data) + " Insert");
resolve(data);
},
(error) => {
this.presentToastError(JSON.stringify(error));
reject(error)
}
)
}
},
(error) => {
this.presentToastError("Erro ao buscar item na tabela ITENS");
reject(error);
}
)
}
let mensagem = "Carga finalizada";
resolve(mensagem);
},
(error) => {
this.presentToastError("Erro ao abrir banco de dados.");
});
});
}