ReferenceError:找不到变量:i(for循环问题)

时间:2021-04-20 17:13:21

标签: javascript reactjs react-native firebase-realtime-database

我从 React Native 项目中休息了大约 3 周,现在我回来了,想继续研究它,不幸的是,该应用程序甚至没有渲染第一个屏幕组件。我已经弄清楚问题是什么了,我只是完全混淆了正在发生的事情:

    var chatkeys = [];
    var partnerkeys = [];
    var contactsDATA = [];

    await firebase.database().
    ref(`users/${PersonalId}/chats`).
    once('value').
    then(snapshot =>{
        for (i in snapshot.val()){//pulling all chatcodes out of database and pushing into chatkeys
            chatkeys.push(snapshot.val()[i]);
        };
    });

问题出在for循环中。这是我收到的错误:

<块引用>

[未处理的承诺拒绝:ReferenceError:找不到变量:i]

  • node_modules\react-native\node_modules\promise\setimmediate\core.js:37:13 在 tryCallOne 中
  • node_modules\react-native\node_modules\promise\setimmediate\core.js:123:24 in setImmediate$argument_0
  • node_modules\react-native\Libraries\Core\Timers\JSTimers.js:130:14 in _callTimer
  • node_modules\react-native\Libraries\Core\Timers\JSTimers.js:181:14 in _callImmediatesPass
  • node_modules\react-native\Libraries\Core\Timers\JSTimers.js:441:30 in callImmediates
  • node_modules\react-native\Libraries\BatchedBridge\MessageQueue.js:387:6 在 __callImmediates
  • node_modules\react-native\Libraries\BatchedBridge\MessageQueue.js:135:6 在 __guard$argument_0
  • node_modules\react-native\Libraries\BatchedBridge\MessageQueue.js:364:10 在 __guard
  • node_modules\react-native\Libraries\BatchedBridge\MessageQueue.js:134:4 在刷新队列中
  • [本机代码]:flushedQueue 中的 null
  • [native code]:null in callFunctionReturnFlushedQueue

JS怎么找不到变量“i”?我从来没有告诉 JS 搜索“i”——它应该是一个循环遍历整个 snapshot.val() 数组的计数器。这是怎么回事?

3 个答案:

答案 0 :(得分:0)

错误指出 i 未定义。阅读您的代码,我可以看到您的 for 循环声明中的 i 可能缺少 let i 变量。

你试过for (let i in snapshot.val()){

答案 1 :(得分:-1)

i 未在作用域中声明。 试试

for (let i in snapshot.val()){//pulling all chatcodes out of database and pushing into chatkeys
            chatkeys.push(snapshot.val()[i]);
        };

let i;
for (i in snapshot.val()){//pulling all chatcodes out of database and pushing into chatkeys
            chatkeys.push(snapshot.val()[i]);
        };

答案 2 :(得分:-2)

错误指出 i 未在缺少 let i 变量的 for 循环声明中定义。这是将所有对象键推送到聊天键数组的另一个示例。

var chatkeys = [];
var partnerkeys = [];
var contactsDATA = [];

firebase.database().ref(`users/${PersonalId}/chats`).once('value').then(snapshot =>{
  const chatKeys = Object.keys(snapshot.val())   
});
相关问题