【问题标题】:Javascript Code returning first array element instead of whole arrayJavascript代码返回第一个数组元素而不是整个数组
【发布时间】:2021-10-04 15:47:27
【问题描述】:

我正在使用 Zapiers JS 代码操作从外部 API 请求一些数据并将其格式化为 Google 表格。

由于某种原因,该操作只是返回第一个数组元素而不是包含所有对象的整个数组?

这是我的代码:

const headers = {
  headers: {
    'Content-Type': 'application/json',
    'Authorization': ...
  }
};
const res = await fetch(
  'https://app.asana.com/api/1.0/portfolios/.../items',
  headers
);

const json = await res.json();
let formattedResponse = await Promise.all(json.data.map(async (entry, i) => {
  let projectRequest = await fetch(
    `https://app.asana.com/api/1.0/projects/${entry.gid}`,
    headers
  );
  let projectRes = await projectRequest.json();
  let projObj = {};
  if (projectRes.data.current_status) {
    projObj.author = projectRes.data.current_status.author.name;
    projObj.color = projectRes.data.current_status.color;
    projObj.date = projectRes.data.current_status.created_at;
    projObj.text = projectRes.data.current_status.text;
    projObj.title = projectRes.data.current_status.title;
  };
  console.warn('a', i, projObj);
  return projObj;
}));

console.warn('b', formattedResponse);

return formattedResponse;

在 Zapier 中测试和审查时,控制台消息

author: Aaron Wallis
color: blue
date :2021-07-28T10:47:18.074Z
text
Summary
good progress
What we've accomplished
asd
What's blocked
sdf
Next steps
dfg
title: Status Update - 28 Jul
id: ...
runtime_meta:
  memory_used_mb: 76
  duration_ms: 2309
  logs:
    1: WARN a 3 {}
    2: WARN a 1 { author: 'Aaron Wallis', color: 'green', date: '2021-07-28T10:50:15.699Z', text: '...', title: 'qweqwe' }
    3: WARN a 2 {}
    4: WARN a 0 { author: 'Aaron Wallis', color: 'blue', date: '2021-07-28T10:47:18.074Z', text: '...', title: 'Status Update - 28 Jul' }
    5: WARN b [ { author: 'Aaron Wallis', color: 'blue', date: '2021-07-28T10:47:18.074Z', text: '...', title: 'Status Update - 28 Jul' }, { author: 'Aaron Wallis', color: 'green', date: '2021-07-28T10:50:15.699Z', text: '...', title: 'qweqwe' }, {}, {} ]
  async: true

您可以看到日志产生了正确的输出,但是formattedResponse的返回只包含第一个数组条目?

我之前没有在 Zapier 中使用过 Code 操作,所以不确定是否需要任何特定代码才能返回完整数组?

编辑:这是 Zapier Zap 的屏幕截图:

【问题讨论】:

  • logs: 5: WARN b 后面是一个由四个对象组成的数组吗?
  • 可能是您调用和使用返回值的方式有问题,因为很明显这段代码将返回完整的数组——或者,如果这是某个库调用的某个函数,也许你需要以不同的格式返回,即return [formattedResponse] - 最好我能想出不知道如何使用这个函数的细节
  • 是我遗漏了什么还是“b”包含数组中的所有 4 个项目...唯一的区别是索引 0 和 1 有数据,而 2 和 3 是空对象而不是 0 和 1数据,以及 2 和 3 没有在“a”输出中
  • @Bravo:是的,也许 - 代码似乎很好,所以它很可能是 Zapier 的事情。希望 Zapier 大师能站出来:D
  • 那么,你不直接在任何地方调用你的函数吗?

标签: javascript zapier


【解决方案1】:

当你说

由于某种原因,该操作只是返回第一个数组元素而不是整个数组

我怀疑只是您没有找到其他对象。他们如何返回您的输出可能会令人困惑,但their instructions say 如果您返回完整的数组,就像您正在做的那样:

如果输出是一个对象数组,后续步骤将运行多次,数组中的每个对象一次。

因此,如果您深入了解下一步 - 在访问代码操作的输出时,可能有多个元素可用,但它可能不会以您期望的方式显示(请参阅说明中的屏幕截图以提供给您一个想法)。

根据您的后续步骤,将您的输出更改为建议的第二种格式(将元素作为行项目而不是数组返回)可能会有所帮助,以查看这是否返回更像您期望的内容。

{"line_items": formattedResponse}

【讨论】:

    【解决方案2】:

    这个聚会迟到了,但另一个答案是正确的:

    如果输出是一个对象数组,后续步骤将运行多次,数组中的每个对象一次。

    在 zap 设置期间,编辑器将仅显示返回的第一个项目。一旦 zap 真正运行,它将“扇出”:

    trigger #=> returns [A, B, C, D, E]
    # Next action(s) runs 5 times
    Action(A)
    Action(B)
    Action(C)
    Action(D)
    Action(E)
    

    因此,如果您的操作是“将行添加到 google 工作表”,那么它将运行 5 次并添加您的 5 行。这只是令人困惑,因为它在 Zap 设置期间这样做,只有在它真正运行时才这样做。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-12
      • 2012-05-02
      • 1970-01-01
      • 1970-01-01
      • 2016-10-31
      • 2016-08-20
      • 2021-02-15
      相关资源
      最近更新 更多