ServiceNow: Javascipt TypeError: Невозможно прочитать свойство undefined
Я пишу onChange Client Script в ServiceNow и у меня возникают проблемы с ошибкой Javascript на клиенте переднего плана. Я продолжаю получать TypeError: Невозможно прочитать свойство 'u_emp_name' из неопределенного. переменная, кажется, меняется, так как в какой-то момент я получал неопределенный u_pos_office, однако данные вытягиваются правильно, и производительность моего кода не влияет на производительность.
Любые предложения о том, что может быть причиной ошибки типа?
Сценарий ниже:
function onChange(control, oldValue, newValue, isLoading) {
var billNum = g_form.getReference('u_billet',findBilletInfo);
console.log('Emp Name: ' + billNum.u_emp_name);
console.log('OFfice: ' + billNum.u_pos_office);
console.log('Career Field: ' + billNum.u_pos_career_field);
if (isLoading || newValue == '') {
return;
}
if (oldValue != newValue){
findBilletInfo(billNum);
}
function findBilletInfo(billNum){
console.log('Bill Num' + billNum);
console.log('encumbent' + billNum.u_emp_name);
var empName = billNum.u_emp_name;
var empNameStr = empName.toString();
console.log(empName);
console.log(empNameStr);
g_form.setValue('u_organization_office',billNum.u_pos_office);
g_form.setValue('u_encumbent',billNum.u_emp_name);
g_form.setValue('u_old_career_field',billNum.u_pos_career_field);
g_form.setValue('u_old_career_specialty',billNum.u_pos_career_specialty);
g_form.setValue('u_old_occupational_series',billNum.u_pos_series);
g_form.setValue('u_old_grade',billNum.u_pos_grade);
g_form.setValue('u_old_work_category',billNum.u_pos_category);
g_form.setValue('u_old_job_title',billNum.u_pos_title);
g_form.setValue('u_losing_rater',billNum.u_emp_rater_name);
g_form.setValue('u_losing_reviewer',billNum.u_emp_reviewer_name);
}
}
1 ответ
Кажется, здесь ошибка
var billNum = g_form.getReference('u_billet',findBilletInfo);
==> console.log('Emp Name: ' + billNum.u_emp_name);
В этом случае billNum
не определено с getReference
выполняется асинхронно. Смотрите документацию по функции.
Это означает, что он не гарантирует возврат значения немедленно или вообще. Вероятно, поэтому иногда вы получаете запись, а не другие.
Вы можете переместить эти журналы отладки в свой findBilletInfo
обратный вызов для проверки значений
if (isLoading || newValue == '') {
return;
}
var billNum = g_form.getReference('u_billet',findBilletInfo);
function findBilletInfo(billNum) {
console.log('Bill Num' + billNum);
console.log('encumbent' + billNum.u_emp_name);
console.log('OFfice: ' + billNum.u_pos_office);
console.log('Career Field: ' + billNum.u_pos_career_field);
...
}
Если вы отлаживаете в Firefox или Chrome, вы можете просто завести объект в консоль, чтобы исследовать весь объект сразу.
function findBilletInfo(billNum) {
console.log(billNum);
...
}
Вывод будет выглядеть примерно так в консоли, и вы сможете увидеть все поля одновременно.