等待函数创建修改后的数组

ecbunoof  于 2022-10-12  发布在  Node.js
关注(0)|答案(1)|浏览(165)

我在写Reaction应用程序。单击一个按钮后,我希望下载该文件。在此之前,必须修改我拥有的数组,以使下载的报告格式正确。

我遇到的问题是,我不知道如何强制getReports()等待setInOrder()处理数据。因此,代码不会进入循环。

export const setInOrder = async (objects) => {

  var sortedObjectsAll = new Object();

  for (let i = 0; i < objects.length; ++i) {
    if (sortedObjectsAll.hasOwnProperty(objects[i].addedBy)) {
      sortedObjectsAll[objects[i].addedBy].push(objects[i]);
    } else {
      sortedObjectsAll[objects[i].addedBy] = new Array();
    }
  }

  return sortedObjectsAll
}

export const getReports = async (objects) => {

  const sortedObjectsAll =  await setInOrder(objects) // This is correct but not available instantly

  console.log(sortedObjectsAll) // this is correctly printed

  const reports = new Array();
  for (let j = 0; j < sortedObjectsAll.length; ++j) {
    console.log("Never enters here")
    reports.push(createReport(sortedObjectsAll[j]))
  }
  return reports
}

我正在尝试使用等待或异步,但不能解决它。我看到了一些建议的承诺,但我不知道如何真正将结果变量返回到实际下载报告的代码。

fnx2tebb

fnx2tebb1#

首先,您不需要编写一个类似的异步等待操作,因为它不是一个异步操作(如果您编写了一个异步操作,并且其中没有任何等待,那么它将不会等待任何东西)。

其次,您希望遍历对象,而不是数组,这就是问题所在。替换为以下内容(也有其他解决方案):

for (const key in sortedObjectsAll) {
  ...
}

相关问题