问题遍历一个对象并添加到另一个对象

时间:2020-09-24 14:05:57

标签: javascript arrays loops hubspot-cms

因此,我试图从API获取一些数据并对其进行一些转换,然后返回值。 这是从hubspot的hubdb API中提取数据,但是当数据返回时,您不会获取字段名称,因此我需要通过一个函数运行它来获取字段名称。 我可以使用以下命令在一行上成功完成此操作。

return axios.get('urltoapi').then((res) => {
 const row = res.data;
 return convertHubdbKeyValues(table_name, row.values).then((details) => {
  return {
   details,
  };
 });
});

然后我尝试遍历多行以构建数据数组,但是我得到的只是一个空数组,我确定我在这里做的是一些非常基本的错误

return axios
 .get(getRowByQueryUrl(table_details.table_id, query))
 .then((res) => {
  var bookings = [];
  this.data = res.data;
  this.data.objects.forEach((item) => {
   return convertHubdbKeyValues(table_name, item.values).then(
    (updatedValues) => {
     bookings.push(updatedValues);
    }
   );
  });
  return bookings;
 });

1 个答案:

答案 0 :(得分:1)

在当前的实现中,在bookings内部的异步调用完成之前,将返回forEach数组。解决此问题的一种方法是使用Promise.all

return axios
 .get(getRowByQueryUrl(table_details.table_id, query))
 .then((res) => {
  const promises = res.data.objects.map(item => convertHubdbKeyValues(table_name, item.values))
  return Promise.all(promises)
 });

顶级函数将返回一个承诺,该承诺将解析为updatedValues的数组,就像您在上面所说的那样。