所以我试图用乏味的承诺链接一些 SELECT sql 查询,但似乎无法做到这一点。我通过查询得到了我想要的结果,但它一直返回 undefined。
这是一些代码:
function getSoma(tableName, cod, index) {
let somaResult;
tp.sql(
`DECLARE @tableName varchar(1000)
SET @tableName = 'SELECT soma from tbs_cod_${tableName} WHERE cod=${cod}'
EXEC (@tableName)`
)
.execute()
.then(async (results) => {
// do something with the results
somaResult = results;
})
.fail(function (err) {
// do something with the failure
console.log("nay" + err);
});
return somaResult;
}
这里是我调用 getSoma 函数以将其推送到另一个数组的地方,但它一直显示未定义
let codesSum;
// post para a API para obter o array de código
axios
.post("http://138.68.29.250:8082", qs.stringify(req.body), {
headers: { "Content-Type": "application/x-www-form-urlencoded" },
})
.then((response) => {
codesSum = response.data.split(/[A-Za-z]*#/gi).filter(Boolean);
codesArray.map((element, index) => {
return (element.cod = Number(codesSum[index]));
});
executeStatementMultipleInsert(codesArray);
console.log(codesArray);
})
.then(() => {
codesArray.forEach(async (element, index) => {
console.log(getSoma(Object.keys(element)[0], element.cod, index))
});
})
.then(() => console.log(codesSum))
.catch((err) => console.log(err));
有关如何解决此问题的任何线索?我怀疑这可能与异步性有关,但我有点卡住了。
编辑 1:通过使用 await 我可以从 getSoma 函数中获取结果,但我似乎无法像此代码中那样将结果推送到另一个数组
let codesSum;
let soma;
// post para a API para obter o array de código
axios
.post("http://138.68.29.250:8082", qs.stringify(req.body), {
headers: { "Content-Type": "application/x-www-form-urlencoded" },
})
.then((response) => {
codesSum = response.data.split(/[A-Za-z]*#/gi).filter(Boolean);
codesArray.map((element, index) => {
return (element.cod = Number(codesSum[index]));
});
executeStatementMultipleInsert(codesArray);
console.log(codesArray);
codesArray.forEach(async (element) => {
soma = await getSoma(Object.keys(element)[0], element.cod);
console.log(soma);
codesSum.push(soma);
});
console.log(codesSum)
})
.catch((err) => console.log(err));
```