我正在尝试运行以下代码,它循环上一步中的一些数据,然后调用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 + '¬e={"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;
}
}
答案 0 :(得分:1)
David来自Zapier平台团队。
您的代码在语法上是正确的,因此您可以去那里。 Standard(我首选的js linter;由null
提供支持)注意到有一些无法访问的代码,但这不是一个showstopper。在eslint
函数中,您已经获得getRep
之后的代码(只有return
,没什么大不了的),这些代码永远不会被调用。 break
退出整个函数,因此它取代了您通常需要的return
。
至于您的实际问题,当您不应该这样做时,您会重新定义break
。关于这个问题有docs,但我们的想法是,lambda(运行代码的地方)定义了一个函数。重新定义打破了代码运行者。
对不起这里的困惑!如果你这样做(或表现出更好的错误),我会在解析器中看到错误。
另外,我不肯定这会做你所期望的。也就是说,您在callback
中使用noteSubject
和noteDescription
朝向函数的顶部,但稍后会对其进行修改。我不认为这些更改会显示在dataString
对象中。我还没有运行你的代码,所以如果修复你的options
重新定义使一切正常,请忽略我的建议。此外,对于no-op功能的其余部分,您可以按these docs返回callback
。
希望这会有所帮助。如果您有任何其他问题,请与我们联系!