Объект NoneType не поддерживает назначение элементов - Zapier - Javascript

Я пытаюсь запустить следующий код, который просматривает некоторые данные из предыдущего шага, а затем вызывает команду выборки POST, и при тестировании в 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': '[email protected]',
      '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;
  }
}

person Joe Olsen    schedule 25.06.2017    source источник
comment
Вы ведь знаете, что здесь есть синтаксические ошибки?   -  person cwallenpoole    schedule 26.06.2017
comment
Где? Я использовал esprima.org/demo/validate.html для проверки синтаксиса, и я не получаю никаких ошибок. Что мне не хватает?   -  person Joe Olsen    schedule 27.06.2017
comment
Извинения. noteDescription = dataEmailSubject[i]; + ' - ' + dataEmailBody[i]; - это не синтаксическая ошибка, но ошибка. ; означает, что `+ '-' + dataEmailBody [i];` будет игнорироваться.   -  person cwallenpoole    schedule 27.06.2017


Ответы (1)


Вот Дэвид из команды Zapier Platform.

Ваш код синтаксически правильный, так что вам хорошо идти туда. Standard (мой предпочтительный js-линтер; на базе eslint) заметил, что есть какой-то недостижимый код, но это не препятствие. В вашей getRep функции у вас есть код после return (просто break, ничего страшного), который никогда не будет вызван. return закрывает всю функцию, поэтому заменяет break, который вам обычно нужен.

Что касается вашей реальной проблемы, вы заново определяете callback, хотя этого не должно быть. По этой проблеме есть документы, но идея состоит в том, что это функция, которую определяет лямбда (где выполняется ваш код). Переопределение ломает бегун кода.

Извините за путаницу! Я подумаю о том, что в парсере будет выдана ошибка, если вы сделаете это (или обнаружите более подходящую ошибку).

Отдельно я не уверен, что это будет делать то, что вы ожидаете. А именно, вы используете noteSubject и noteDescription в dataString в верхней части функции, но изменяете его позже. Я не думаю, что эти изменения будут отражены в объекте options. Я не запускал ваш код, поэтому, если исправление вашего callback переопределения заставит все работать, игнорируйте мои предложения. Кроме того, чтобы отключить остальную часть функции, вы можете вернуть [] для этих документов .

Надеюсь это поможет. Дайте мне знать, если у вас возникнут другие вопросы!

person xavdid    schedule 26.06.2017
comment
Спасибо, Дэвид! Я все еще не получаю точную модификацию моего кода, которую вы предлагаете с помощью обратного вызова. Я обновил то, что, как я думаю, вы говорите, но все еще получаю сообщение об ошибке. По сути, я изменил его на: ‹br/› ‹br/› function attachNote() { fetch ('https://rova.agilecrm.com/dev/api/contacts/email/note/add', options) .then(function(res) { return res.json(); }) } ‹br/› ‹br/› Я все еще получаю ту же ошибку при изменении кода. - person Joe Olsen; 29.06.2017
comment
Конечно! Ваше обещание должно заканчиваться передачей данных в обратный вызов. Например, .then(function(res){ callback(null, [{a: 1, b: 2}]); }). Если это не поможет, можете ли вы повторно скопировать свой код в вопрос SO, чтобы я мог посмотреть? - person xavdid; 30.06.2017