I would like to wait untill my function checkNumber() finish and returns result. Unfortunelly for-off loop doesn't wait for function and do all iterations at start. I tried many combinations with async/await but none of them really worked. When i run this function it prints out as many console.log("start error") as loops, and then I get productList. I would like to stop for loop when checkNumber() returns error.
Main function:
if (!req.body) {
res.status(400).send({
message: "Values can not be empty!"
});
}
console.log("list of products: ", req.body.product);
const productArr = req.body.product; //array of products retrieved from json
let productList = [];
let quantityList = [];
let error = 0;
for (const product of productArr) { //iterate through products
console.log("start error: ", error); // <----
if (error == 1) {
console.log("stop");
break;
}
//check if product's vat exists in vat table, if not add new
Vat.checkNumber(product.vat, async function (err, data) {
console.log("result: ", data);
if (!data) {
console.log("not found");
console.log(err);
error = 1;
} else {
console.log("found");
const vat_id = data;
//crete new product obj json
let newProduct = {
vat_id: vat_id,
name: product.name,
price: product.price
};
//store product list and their quantity to use later in sql query
productList.push(newProduct);
quantityList.push(product.quantity);
console.log(productList);
console.log(quantityList);
}
});
}
}
Vat function:
sql.query("SELECT * FROM vat where number = ?", number, function (err, res) {
if (err) {
console.log("error: ", err);
result(err, null);
return;
}
if (res.length <= 0) {
err = "Vat cannot be null";
result({ error: "Vat not found" }, null);
return;
}
console.log("Found vat: ", res[0].id);
result(null, res[0].id);
return;
});
};