乏味的承诺返回未定义

时间:2021-05-18 07:43:43

标签: node.js express tedious

所以我试图用乏味的承诺链接一些 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));
    ```

0 个答案:

没有答案