Не публикуя много кода, я надеюсь, что кто-нибудь поможет мне понять разницу между функцией
onDidDispose() и функцией
deactivate() для расширений VS Code. У меня есть функция
dispose(), которая вызывается обеими вышеуказанными функциями. Вот код:
Код: Выделить всё
public static async dispose() {
async function closedb() {
const ws = new WebSocket('ws://localhost:' + MVSQR.wsPort);
ws.onopen = (event) => {
ws.send ("quit");
};
ws.onerror = (event) => {
console.log('WebSocket error: ', event);
};
}
await closedb();
if (MVSQR.currentPanel) {
MVSQR.currentPanel._panel.dispose();
console.log(`Disposing ${MVSQR.currentPanel._disposables.length} objects`)
while (MVSQR.currentPanel._disposables.length) {
const x = MVSQR.currentPanel._disposables.pop();
if (x) {
x.dispose();
};
};
};
MVSQR.currentPanel = undefined;
};
В функции
dispose() все, что мне нужно, — это открыть веб-сокет, чтобы отправить сообщение во внутреннюю базу данных, чтобы сообщить ей о завершении работы. Когда функция
dispose() вызывается из функции
onDidDispose() (т. е. пользователь закрыл окно для моего расширения, но код Visual Sutdio все еще работает), все работает нормально. Веб-сокет открывается, сообщение отправляется, а серверная часть корректно закрывается. И одноразовые вещи обрабатываются. Но когда функция
dispose() вызывается из функции
deactivate() (т. е. пользователь завершает работу Visual Studio Code), функция
closedb() не работает. Создается новый экземпляр WebSocket. Но он никогда не переходит в состояние «ReadyState», и событие on.open никогда не запускается.
Я уверен, что есть что-то очевидное, что я делаю неправильно, но я не могу точно определить это. Любая помощь будет оценена по достоинству.
Подробнее здесь:
https://stackoverflow.com/questions/798 ... have-diffe