Ошибка синтаксического анализа нескольких объектов. Свойство length не существует. - PullRequest
1 голос
/ 28 мая 2020

У меня есть следующее определение функции, вызываемой событием.

    forceUpdateLiveLocation: Returns Promise<false | true | LiveLocationChangedEvent[]>
     const forcedLiveLocation = await client.forceUpdateLiveLocation( message.from );
     console.log(forcedLiveLocation[0]);

работает, но возвращает только первый объект

[{
  lat: -2.510491,
  lng: -44.220796
}]

, когда у меня есть несколько событий, он строит такие объекты:

[ {
  lat: -2.510491,
  lng: -44.220796
},{
  lat: -2343434,
  lng: -443434343
}];

, поэтому я пытаюсь выполнить for с объектами, но у меня возникает ошибка.

for(var i = 0; i < forcedLiveLocation.length; i++){
    console.log(forcedLiveLocation[i].lat.toString());   
}

Ошибка:

Свойство length не существует для типа boolean | LiveLocationChangedEvent [] '. Свойство length не существует для типа false.

Ответы [ 2 ]

1 голос
/ 28 мая 2020

Судя по тому, что я предполагаю, это документация по адресу https://open-wa.github.io/wa-automate-nodejs/classes/client.html#forceupdatelivelocation:

Список участников чата, у которых есть свое текущее местоположение. Если чат не существует или в чате нет контактов, которые активно делятся своим текущим местоположением, он вернет false. Если это чат с одним контактом, в массиве будет только 1 значение, если у контакта включено их livelocation. Пожалуйста, обратите внимание. Это следует вызывать только раз в 30 секунд или около того. Это заставляет телефон получать последние данные о местоположении для номера в реальном времени. Это можно использовать вместе с onLiveLocation (это вызовет onLiveLocation).

Итак, иногда вы получаете свой массив событий, а иногда нет. Вам нужно будет ответить соответственно в разных случаях.

if (Array.isArray(forcedLiveLocation)){ 
    for(var i = 0; i < forcedLiveLocation.length; i++){
        console.log(forcedLiveLocation[i].lat.toString());   
    }
} else {
    // do something else
}
0 голосов
/ 28 мая 2020

Обещание должно возвращать один из этих типов bool или LiveLocationChangedEvent[], поэтому вам нужно обрабатывать тип функции forceUpdateLiveLocation.

if(typeof forcedLiveLocation !== "boolean") // then do what ever you want

регистрация результата работает, потому что console.log не имеет ничего общего с возвращаемым типом

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...