Расширение Vscode использует переменную вне функции - PullRequest
0 голосов
/ 13 сентября 2018

Здравствуйте, в vscode extension.js. Я не могу использовать переменную "chunk" вне функции, в которой она находится:

let http = require('http');
let keyname = "key.key";
http.get('http://mysite.nl/vscode/?with=data', function(res) {
  res.on("data", function(chunk) {
    vscode.window.showInformationMessage("INSIDE: " + chunk);
  });
});
vscode.window.showInformationMessage("OUSIDE FUNCTION:" + chunk); /*this does not work*/

edit: (попытался создать глобальную переменную, но мне не удалосьмного в javascript, это должно работать?)

let globalvar;
let http = require('http');
let keyname = "key.key";
http.get('http://mysite.nl/vscode/?with=data', function(res) {
  res.on("data", function(chunk) {
    vscode.window.showInformationMessage("INSIDE: " + chunk);
    globalvar = chunk;
  });
});
vscode.window.showInformationMessage("OUSIDE FUNCTION:" + globalvar); /*this does not work*/

1 Ответ

0 голосов
/ 13 сентября 2018

Это не работает по двум причинам. Прежде всего, аргументы функции являются локальными для функции, которой они принадлежат:

function foo(bar) {
    console.log("Inside function: %s", typeof bar);
    function inner(){
      console.log("In function's scope: %s", typeof bar);
    }
    inner();
}

foo("Hi");
console.log("Elsewhere: %s", typeof bar);

Во-вторых, http.get() начинает извлекать URL-адрес в другом потоке и продолжает выполнение остальной части программы, то есть немедленно вызывает vscode.window.showInformationMessage(). Переменная даже еще не существует, поэтому, даже если у вас не было проблем с областью действия, печатать нечего. Затем, спустя некоторое время (даже если всего несколько миллисекунд), запрос GET завершается. Если это удалось, тогда наконец прозвучит function(chunk) {} - слишком поздно!

let globalvar;
window.setTimeout(function (chunk){
    console.log("Done! Chunk is %s", chunk);
    globalvar = chunk;
}, 2000, "Hi!");
console.log("Chunk? %s", typeof globalvar);
...