negezor / vk-io

Modern VK API SDK for Node.js
https://npm.im/vk-io
MIT License
548 stars 85 forks source link

Error: Polling updates already started #253

Closed kdanet closed 4 years ago

kdanet commented 4 years ago

Долгое время сидел на версии 4.0.0-rc.20, однако вынужден был перейти на 4.0.0-rc.30. После чего столкнулся с тем,что проект не хочет стартовать,выкидывая данную ошибку:

Error: Polling updates already started at PollingTransport.start (F:\VkBot\node_modules\vk-io\lib\index.js:6743:19) at Updates.startPolling (F:\VkBot\node_modules\vk-io\lib\index.js:7372:38) at Updates.start (F:\VkBot\node_modules\vk-io\lib\index.js:7400:20) at process._tickCallback (internal/process/next_tick.js:68:7)

Попробовал вернуться на предыдущую версию,там все отлично. Прошу прощения,если вопрос глупый,заранее премного благодарен.

negezor commented 4 years ago

У вас в коде где-то несколько раз вызывается vk.updates.start() вместо одного. Или ещё используются вместе vk.updates.start() и vk.updates.startPolling()

kdanet commented 4 years ago

@negezor , Премного благодарен, ваше ответ являлся верным и помог мне. Правда столкнулся с новой проблемой , при выполнении данного участка кода, выбрасывает в catch, на прошлой версии всё работало.

async getUsersInfo() {
        const request = new Request('users.get', {
            user_ids: this.id
        });
        api.callWithRequest(request).then(response => {
            this.name = response[0].first_name
            this.surname = response[0].last_name
        }).catch(e => {
            console.error(e);
        });
    }
APIError: Code №3 - Unknown method passed
    at API.callMethod (F:\VkBot\node_modules\vk-io\lib\index.js:828:39)
    at process._tickCallback (internal/process/next_tick.js:68:7)
  code: 3,
  name: 'APIError',
  params:
   [ { key: 'method', value: 'undefined' },
     { key: 'oauth', value: '1' },
     { key: 'v', value: '5.103' } ]
negezor commented 4 years ago

Дело в том что менялось внутреннее API для Request.

async getUsersInfo() {
        const request = new Request({
            method: 'users.get',
            params: { user_ids: this.id }
        });
        api.callWithRequest(request).then(response => {
            this.name = response[0].first_name
            this.surname = response[0].last_name
        }).catch(e => {
            console.error(e);
        });
    }

Но честно непонятно зачем это понадобилось, если это всё можно написать очень декларативно:

async getUsersInfo() {
    const [user] = await vk.api.users.get({
        user_ids: this.id
    });

    this.name = user.first_name;
    this.surname = user.last_name;
}
kdanet commented 4 years ago

@negezor,премного благодарен.