【问题标题】:How to fix variable is not defined` - The variable in question is clearly defined in my code如何修复变量未定义`-有问题的变量在我的代码中明确定义
【发布时间】:2019-09-19 18:29:11
【问题描述】:

嘿,令人惊叹的互联网人, 这里的问题很愚蠢,但是我写的一些 Javascript 有点问题。这是代码-

const req0 = http.request({
      hostname: `api.trello.com`,
      port: 443,
      path: `/1/lists/5cb77e9ef180dd2bbb25acf2/cards?key=${trelloKey}&token=${trelloToken}&fields=name`,
      method: `GET`
    }, res => {
      let str = '';
      res.on('data', chunk => {
        str += chunk;
      });
      res.on('end', () => {
        try {
            var level0Data = JSON.parse(str);
            console.log(`Level 0: ${level0Data}`)
            level0Data.forEach((k,v) => {
                var id = k.id;
                var name = k.name;
                console.log(`${id} = ${name}`);
            });
        } catch(error) {
            console.log(error);
        }
      });
    });
    req0.on('error', error => {
      console.log(error);
    });
    req0.end();


  level0Data.forEach(function(level0Names) {
    // code here
  });

我遇到的问题是它一直给我一个错误,指出level0Data is not defined. 我知道这是一个相当新手的问题,但我会很感激一些指导。 谢谢!

【问题讨论】:

  • 这是范围的问题 - 变量在 res.on('end', () => { 内定义......在此之外,它没有定义 - 即使该变量是在外部范围内定义的,它仍然是空的在它现在未定义的地方 - 由于异步
  • 看看你做得怎么样level0Data.forEach((k,v) => {...你为什么不把// code here也放在那个循环里?
  • @some - 你有我可以骑的全球自行车吗? :p
  • @JaromandaX 不,但我昨天买了一辆电动滑板车,所以如果你来瑞典,并且很好,我可以让你试试:p
  • @GurpreetSingh 最好在 end-event-handler 中处理所有内容。

标签: javascript node.js trello


【解决方案1】:

您是否看到level0Data 未在以下范围内定义? (MDN reference(Scope))

  level0Data.forEach(function(level0Names) {
    // code here
  });

你必须在回调函数中使用level0data


// NOTE: Level0data is available only here, as you defined in this scope.
...

            var level0Data = JSON.parse(str);
            console.log(`Level 0: ${level0Data}`)
            level0Data.forEach((k,v) => {
                var id = k.id;
                var name = k.name;
                console.log(`${id} = ${name}`);
            });

...

或者你可以传递一个函数来处理回调。

function handle(str) {
            var level0Data = JSON.parse(str);
            console.log(`Level 0: ${level0Data}`)
            level0Data.forEach((k,v) => {
                var id = k.id;
                var name = k.name;
                console.log(`${id} = ${name}`);
            });

  level0Data.forEach(function(level0Names) {
    // code here
  });
}

...

try {
  handle(str)
} catch(e) {
  console.error(e)
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-26
    • 2017-09-22
    相关资源
    最近更新 更多