'NoneType'对象不支持项目分配 - Zapier - Javascript

时间:2017-06-25 21:50:05

标签: javascript fetch zapier

我正在尝试运行以下代码,它循环上一步中的一些数据,然后调用POST fetch命令,当我在Zapier中测试时,我得到模糊的“'NoneType'对象不支持项目分配”错误。我已就此与他们联系,他们无法支持我的代码,也无法提供有关正在发生的事情的更好的数据。

有什么想法吗?

代码开始

var noteEmail;
var noteSubject;
var noteDescription;

function attachNote() {
    fetch ('https://xyzdomain.agilecrm.com/dev/api/contacts/email/note/add', options)
   .then(function(res) {
     return res.json();
   })
   .then(function(json) {
     callback(null, json);
   })
   .catch(callback);
 }

var headers = {
  'Accept': 'application/json',
  'Content-Type ': 'application/x-www-form-urlencoded'
};
var dataString = 'email=' + noteEmail + '&note={"subject":"' + noteSubject + '","description":"' + noteDescription + '"}';
var options = {
  method: 'POST',
  headers: headers,
  body: dataString,
  auth: {
      'user': 'xyz@xyz.com',
      'pass': 'password'
  }
};

function callback(error, response, body) {
  if (!error && response.statusCode == 200) {
    console.log(body);
  }
}

//Get Rep name by Hubspot ID
function getRep(repNumber) {
  switch (repNumber) {
  case "12345678":
    return "Steve Jenkins";
  break;
  case "90123456":
    return "John Jenkins";
  break;
  default:
   return "Dave Jenkins";
   break;
  }
}

var dataBody = inputData.Body.split(',');
var dataType = inputData.Type.split(',');
var dataEmailSubject = inputData.EmailSubject.split(',');
var dataCreatedAt = inputData.CreatedAt.split(',');
var dataCreatedBy = inputData.CreatedBy.split(',');
var dataMeetingTitle = inputData.MeetingTitle.split(',');
var dataStartTime = inputData.StartTime.split(',');
var dataEmailBody = inputData.EmailBody.split(',');
var dataEngagementId = inputData.EngagementId.split(',');

for (var i = 0; i < dataEngagementId.length; i++) {
  switch (dataType[i]) {
  case "NOTE":
    noteSubject = "HS NOTE: - " + dataCreatedAt[i] + " - " + getRep(dataCreatedBy[i]);
    noteDescription = dataBody[i];
    attachNote();
  break;
  case "MEETING":
    noteSubject = 'HS MEETING: - ' + dataStartTime[i] + " - " + getRep(dataCreatedBy[i]);
    noteDescription = dataMeetingTitle[i];
    attachNote();
  break;
  case "TASK":
    noteSubject = 'HS TASK: - ' + dataCreatedAt[i] + " - " + getRep(dataCreatedBy[i]);
    noteDescription = dataBody[i]; 
    attachNote();
  break;
  case "CALL":
    noteSubject = 'HS CALL: - ' + dataCreatedAt[i] + " - " + getRep(dataCreatedBy[i]);
    noteDescription = dataBody[i];
    attachNote();
  break;
  case "EMAIL":
    noteSubject = 'HS EMAIL: - ' + dataCreatedAt[i] + " - " + getRep(dataCreatedBy[i]);
    noteDescription = dataEmailSubject[i]; + ' - ' + dataEmailBody[i];
    attachNote();
  break;
  case "INCOMING_EMAIL":
    noteSubject = 'HS INCOMING EMAIL: - ' + dataCreatedAt[i] + " - " + getRep(dataCreatedBy[i]);
    noteDescription = dataEmailSubject[i]; + ' - ' + dataEmailBody[i];
    attachNote();
  break;
  default:
  //Nothing matches do nothing
  break;
  }
}

1 个答案:

答案 0 :(得分:1)

David来自Zapier平台团队。

您的代码在语法上是正确的,因此您可以去那里。 Standard(我首选的js linter;由null提供支持)注意到有一些无法访问的代码,但这不是一个showstopper。在eslint函数中,您已经获得getRep之后的代码(只有return,没什么大不了的),这些代码永远不会被调用。 break退出整个函数,因此它取代了您通常需要的return

至于您的实际问题,当您不应该这样做时,您会重新定义break。关于这个问题有docs,但我们的想法是,lambda(运行代码的地方)定义了一个函数。重新定义打破了代码运行者。

对不起这里的困惑!如果你这样做(或表现出更好的错误),我会在解析器中看到错误。

另外,我不肯定这会做你所期望的。也就是说,您在callback中使用noteSubjectnoteDescription朝向函数的顶部,但稍后会对其进行修改。我不认为这些更改会显示在dataString对象中。我还没有运行你的代码,所以如果修复你的options重新定义使一切正常,请忽略我的建议。此外,对于no-op功能的其余部分,您可以按these docs返回callback

希望这会有所帮助。如果您有任何其他问题,请与我们联系!