【发布时间】:2021-09-27 21:49:34
【问题描述】:
function testData() {
return new Promise((resolve, reject) => {
Data.findAll({
where: {
adress: "New York",
},
attributes: [
"id", "name", "type"
]
}).then((object) => {
let data1 = [],
data2 = [];
object.map(async (value) => {
data1.push([value.name, value.type]);
});
console.log("data1 Value", data1);
let test;
object.map(async (value) => {
test = await getValue(value.name);
data2.push([value.name, value.type, test]);
});
console.log("data1 Value", data2);
}).catch((err) => {
return reject(err);
});
});
}
所以我编写了一个代码来从数据库中获取数据并将其保存在对象中
下面例如从数据库中获取此数据,以便我的对象包含此值
let object = [{
id: `01`, name: `fish`, type: `marine`,
}, {
id: `02`, name: `fish`, type: `fresh`,
}, {
id: `03`, name: `fish`, type: `tank`,
}, {
id: `04`, name: `animal`, type: `pet`,
}]
let data1=[],data2=[];
object.map(async (value) => {
data1.push([value.name,value.type]);
})
console.log("data1 Value",data1);
let test;
object.map(async (value) => {
test = await getValue(value.name);
data2.push([value.name,value.type,test]);
})
console.log("data1 Value",data2);
如您所见,我在 map 函数内部编写 async 和 await,在 map 函数外部安慰数据,但它不起作用,在 data1 中,我得到了值,但在 data2 内部得到了空白值。
我不确定我应该怎么做才能在我的data2 中获取测试值
这里getValue() 是冗长的代码,这就是为什么我可以发布但它的工作代码,因为我可以控制它的价值。
【问题讨论】:
-
map 已经返回一个数组,不需要推入一个新数组。你可以只返回值。这个返回的数组包含你所有的承诺,然后你可以将它们传递给Promise.all()
-
1.不要使用
.map()进行简单的数组迭代。使用.forEach()或实际循环。 2.async/await不能与.map()/.forEach()以您的方式工作。您需要使用Promise.all()和 *return 值,或者如果序列相关,则使用常规循环。 -
与您的问题无关,但不要在其使用范围之外声明
test。 -
promise.all()我应该在哪里写@VLAZ -
@Aakash 检查重复项。应该是
Promise.all(object.map(value => getValue(value.name)))。它仍然返回一个将解析为所有值的数组的承诺。
标签: javascript node.js async-await promise conditional-statements