Promise.all 在 Node JS 中返回未定义

Promise.all returning undefined in Node JS

我有一个代码可以从第一个 API 中获取目录名称。对于每个目录,需要从第二个 API 中获取文件名。我在我的 Node JS 代码中使用了类似的东西 -

async function main_function(req, res) {
  const response = await fetch(...)
    .then((response) => {
      if (response.ok) {
        return response.text();
      } else {
        return "";
      }
    })
    .then((data) => {
      dirs = ...some logic to extract number of directories...
      const tempPromises = [];

      for (i = 0; i < dirs.length; i++) {
        tempPromises.push(getFilename(i));
      }
      console.log(tempPromises); // Prints [ Promise { <pending> } ]
      Promise.all(tempPromises).then((result_new) => {
        console.log(result_new); // This prints "undefined"
        res.send({ status: "ok" });
      });
    });
}

async function getFilename(inp_a) {
  const response = await fetch(...)
    .then((response) => {
      if (response.ok) {
        return response.text();
      } else {
        return "";
      }
    })
    .then((data) => {
      return new Promise((resolve) => {
        resolve("Temp Name");
      });
    });
}

我在这里错过了什么?

您的 getFilename() 似乎没有返回任何东西,即返回 undefined。尝试在函数末尾返回 response

async function getFilename(inp_a) {
  const response = ...

  return response;
}

感谢 Mat J 的评论。我能够简化我的代码,并了解何时不使用链接。

还要感谢 Shadab 的 ,它帮助我知道异步函数总是 returns 一个承诺,返回的是默认承诺,而不是实际的字符串。没有意识到这一点。 (我对 JS 很陌生)

这是我的最终 code/logic 效果 -

async function main_function(req,res){
    try{
      const response = await fetch(...)
      const resp = await response.text();
      dirs = ...some logic to extract number of directories...
      const tempPromises = [];

      for (i = 0; i < dirs.length; i++) {
         tempPromises.push(getFilename(i));
      }
      
      Promise.all(tempPromises).then((result_new) => {
         console.log(result_new);
         res.send({ status: "ok" });
       });
    }
    catch(err){
       console.log(err)
       res.send({"status" : "error"})
    }
}

async function getFilename(inp_a) {
  const response = await fetch(...)
  respText = await response.text();
  return("Temp Name"); //
}