javascript - 使用节点 js/javascript 在 map 函数中使用 async-await 值
问题描述
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);
如您所见,我正在编写async
和await
内部映射函数,并在映射函数外部安慰数据,但它不起作用,在哪里data1
我得到了值,但在里面data2
我得到了空白值。
我不确定我应该怎么做才能在我的内部获取测试值data2
这getValue()
是冗长的代码,这就是为什么我可以发布但它的工作代码,因为我可以控制它的价值。
解决方案
首先,您为什么要为此使用地图?map 返回一个新数组。您应该为此使用 forEach/for 循环。
其次,据我所知,您不应该在映射数组方法中使用异步事物。删除数组方法中的 async/await 。所以现在你得到了一系列未解决的承诺
循环结束后使用 Promise.all([...data2]) 解决它们
推荐阅读
- mysql - 如何计算 1 个表 MySql 中两列中不同数据的出现次数
- javascript - 使用javascript保存上传的简历?
- jquery - jquery ui 选择菜单自动填充
- scala - Spark:字符串到日期数据类型转换返回空值
- css - /高度被忽略?
- c# - 制作一个返回 BLOB .net 核心 (EF) 的 get api
- amazon-web-services - 无法访问 CloudTrail 使用的 S3 存储桶
- regex - 当一些键是符号而其他键不是时,使哈希保持一致
- javascript - 如何阻止图像在 Javascript 中加载?
- ruby-on-rails - 如何在我的 Rails 应用程序中获取 Google 评论