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"); //
}
我有一个代码可以从第一个 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 的
这是我的最终 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"); //
}