Для чего нужна (в каких случаях может быть полезна) проверка на наличие id контакта, и что он не нулевой?
Проверка на наличие id - это в угоду редактору кода, чтоб не подсвечивал красным. В целом подход с find можно было заменить на получение первого элемента списка с проверкой количества элементов. Проверка на нулевой идентификатор - в прошлых версиях были случаи, когда в id был записан нулевой id для некоторых элементов. На текущей версии скорее всего не актуально, но я решил оставить так
а что если вот такие ошибки вылезли Property 'gte' does not exist on type 'RefItemFieldOperand<TRefItem> | FieldOperand<boolean> | PhoneFieldOperand<any> | StringFieldOperand<any> | ... 4 more ... | FieldOperand<...>'. Property 'gte' does not exist on type 'RefItemFieldOperand<TRefItem>'.(2339) Property 'lt' does not exist on type 'RefItemFieldOperand<TRefItem> | FieldOperand<boolean> | PhoneFieldOperand<any> | StringFieldOperand<any> | ... 4 more ... | FieldOperand<...>'. Property 'lt' does not exist on type 'RefItemFieldOperand<TRefItem>'.(2339)
Какая разница между: 1. асинхронная функция, вызываемая без await; 2. синхронная функция; 3. синхронная функция, возвращающая Promise<any> (в примере https://tssdk.elma365.com/ru/pages/quick-start/scripts-in-widgets.html#пользовательские-функции)?
1. Функция будет запущена, но программа не будет ждать ее завершения и пойдет дальше по коду. Например вызов функции записи в лог. Вызываем ее и не ждем - выполнится она или нет. Если упадет - на нашу программу это не повлияет, мы уже свою работу выполнили. 2. Функция будет запущена и программа будет ждать результата выполнения. В данном случае мы будем ждать когда функция логирования сделает свою работу. 3. По сути это эквивалентно первому варианту, т.к. async/await это удобная обертка над Promise