javascript - vscode 扩展在函数外使用变量

标签 javascript visual-studio-code vscode-extensions

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

最佳答案

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

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

关于javascript - vscode 扩展在函数外使用变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52315676/

相关文章:

visual-studio-code - 自定义按钮未显示在 VS 代码编辑器标题菜单栏中

javascript - 除了混淆之外,还有其他方法可以使在 javascript 中获取任何字符串变得更加困难吗?

c# - Console.ReadLine() 在 VS Code 中不起作用,用 C# 编写代码

visual-studio-code - VS Code 装饰器扩展高于/低于指定范围

tags - Visual Studio代码删除标签突出显示

visual-studio-code - 打开文件夹/工作区后关闭 VS Code 欢迎屏幕

visual-studio-code - 如何在 VS Code 问题窗口中添加消息

javascript - 将数据放在 firebase 数据库中多个位置的最佳方法

javascript - 如何使用 Enzyme 浅包装器对作为 prop 传递给子组件的 React 函数进行单元测试

javascript - 在矩形、圆形和多边形内填充标记