我有一个这样的代码示例:
const iam = ['dd', 'aaa', 'cc'];
async function bigTest() {
async function details() {
const arr = [];
const files = [];
iam.forEach(async (i) => {
arr.push({
name: 'test',
});
files.push(arr);
return files;
});
}
const result = await details();
console.log(result);
}
bigTest();
并且我想将arr
的最终结果存储在数组files
中,但是它返回未定义的
在循环内部,它返回数组,但是在details函数外部,它返回未定义
答案 0 :(得分:1)
您应该使用函数map
。
由于您需要async
声明,因此map
函数中的数组包含Promises,因此您需要按以下方式解决它们:
Promise.all(files);
const iam = ['dd', 'aaa', 'cc'];
async function bigTest() {
async function details() {
const files = iam.map(async(name) => {
return { name };
});
return Promise.all(files);
}
const result = await details();
console.log(result);
}
bigTest();
.as-console-wrapper { max-height: 100% !important; top: 0; }
答案 1 :(得分:1)
我认为,您真正想做的是使用forEach()之外的返回值
const iam = ['dd', 'aaa', 'cc'];
async function bigTest() {
async function details() {
const arr = [];
const files = [];
iam.forEach(async (i) => {
arr.push({
name: 'test',
});
files.push(arr);
});
return files;
}
const result = await details();
console.log(result);
}
bigTest();
答案 2 :(得分:0)
Array.forEach始终返回未定义。您正在寻找Array.map
答案 3 :(得分:0)
此代码中的任何一个都不应该是异步的。摆脱所有异步/唤醒,一切都会好起来的。