Почему некоторые возвращаемые массивы ограничены в JXA (Javascript для автоматизации в macOS)

Я пытаюсь получить все свои контакты iMessage из приложения "Сообщения" через JXA-скриптинг. Когда я назначаю массив переменной, я могу работать только с первыми 40 объектами. Но массив имеет длину 147.

var Messages = Application("Messages")
var buddies = Messages.buddies()

console.log(buddies.length) // == 147

Когда я перехожу на вкладку "ответы" в нижней части редактора сценариев, я вижу всех 147 друзей:

app.buddies()
    --> [app.buddies.byId(...), ...]

Но когда я пытаюсь работать с объектом из массива с индексом больше 39, я получаю ошибку -1728 (объект не найден), например

console.log(buddies[45].id())

В чем дело? И как правильно получить идентификаторы всех друзей?

1 ответ

Решение

Разница, конечно, между

Messages.buddies()

(вызов функции, возвращающей массив), и

Messages.buddies

(ссылка на объект друзей).

Вы должны быть в состоянии получить полный список идентификаторов, позвонив .id() метод только один раз, прямо на .buddies объект.

(() => {
    'use strict';

    const
        Messages = Application("Messages"),
        refBs = Messages.buddies;

    return refBs.id();

})();
Другие вопросы по тегам