首页 > 解决方案 > 使用节点 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);

如您所见,我正在编写asyncawait内部映射函数,并在映射函数外部安慰数据,但它不起作用,在哪里data1我得到了值,但在里面data2我得到了空白值。

我不确定我应该怎么做才能在我的内部获取测试值data2

getValue()是冗长的代码,这就是为什么我可以发布但它的工作代码,因为我可以控制它的价值。

标签: javascriptnode.jsasync-awaitpromiseconditional-statements

解决方案


首先,您为什么要为此使用地图?map 返回一个新数组。您应该为此使用 forEach/for 循环。

其次,据我所知,您不应该在映射数组方法中使用异步事物。删除数组方法中的 async/await 。所以现在你得到了一系列未解决的承诺

循环结束后使用 Promise.all([...data2]) 解决它们


推荐阅读