【问题标题】:Vscode extension use variable outside of functionVscode 扩展使用函数外的变量
【发布时间】:2018-09-13 14:16:01
【问题描述】:

在 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*/

编辑:(试图创建一个全局变量,但我在 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*/

【问题讨论】:

  • 你不能在javascript这样做
  • 您的代码是异步的,您无法在设置之前获取chunk 的值....在回调之外也看不到chunk
  • 将其分配给某个全局变量

标签: javascript visual-studio-code vscode-extensions


【解决方案1】:

它不起作用有两个原因。首先,函数参数对于它们所属的函数是本地的:

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);

【讨论】:

  • 非常感谢您的解释!我想我得再写一段代码在一行中完成,类​​似这样
猜你喜欢
  • 2019-01-11
  • 2021-02-07
  • 2018-06-03
  • 1970-01-01
  • 2021-12-08
  • 2014-12-25
  • 2022-11-10
  • 2021-10-17
  • 1970-01-01
相关资源
最近更新 更多