Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在React Native中将Firebase实时数据库数据值增加一个?_Javascript_Firebase_React Native_Firebase Realtime Database - Fatal编程技术网

Javascript 如何在React Native中将Firebase实时数据库数据值增加一个?

Javascript 如何在React Native中将Firebase实时数据库数据值增加一个?,javascript,firebase,react-native,firebase-realtime-database,Javascript,Firebase,React Native,Firebase Realtime Database,我有一个像这样的Firebase实时数据库 let arr = ['myKey1' , 'myKey2' , 'myKey3'] try { for(let i=0; i<arr.length; i++) { let ref = firebase.database().ref(myRoot).child(arr[i]); ref.transaction( function(myValue) { return (myValue || 0) + 1;

我有一个像这样的Firebase实时数据库

let arr = ['myKey1' , 'myKey2' , 'myKey3']

try {
  for(let i=0; i<arr.length; i++) {
     let ref = firebase.database().ref(myRoot).child(arr[i]);
     ref.transaction( function(myValue) {
        return (myValue || 0) + 1;
     })
  }
  this.props.navigation.goBack();
}
catch(error) {
  console.log(error));
}
myRoot
|---我的钥匙1
|--我的价值:1
|
|---我的钥匙2
||--myValue:0
|
|---我的钥匙3
|---myValue:2

我需要将所有这些值增加一,并得到以下输出

myRoot
|---我的钥匙1
|--我的价值:2
|
|---我的钥匙2
|--我的价值:1
|
|---我的钥匙3
|---myValue:3

如何使用循环来实现这一点?或者,在React Native中实现这一点的最佳方法是什么

我真正想要的是这个。让我们想想,我有一个主屏幕。它有一个叫做“列表值”的按钮。单击后,我导航到下一个页面(堆栈导航器),在那里,它显示myKey1、myKey2和myKey3的值。这是一个单一列表。让我们假设在第二个sreen中有一个称为“增量值”的按钮。当我按下它时,我想增加值并导航回主屏幕

我试过这样的东西

let arr = ['myKey1' , 'myKey2' , 'myKey3']

try {
  for(let i=0; i<arr.length; i++) {
     let ref = firebase.database().ref(myRoot).child(arr[i]);
     ref.transaction( function(myValue) {
        return (myValue || 0) + 1;
     })
  }
  this.props.navigation.goBack();
}
catch(error) {
  console.log(error));
}
让arr=['myKey1','myKey2','myKey3']
试一试{

对于(让i=0;i注意您正在调用:
。然后(()=>this.props.navigation.goBack());
在每次迭代中。我认为您需要使用
runTransaction
,如中所述

示例适用于以下结构:

myRoot
  |--- mykey1: number
对于这样的结构:

myRoot
  |--- mykey1
  |     |---myValue: number
您应该使用下一个
const ref
声明:

const ref = db.ref(myRoot).child(key).child('myValue');
样品火库 示例实时数据库
谢谢你的回复。不幸的是,这不起作用。没有更新值。还有其他解决方案吗?我已经更新了我尝试过的代码。尽管如此,它仍然可以正常工作,并按照我的预期更改值。但是,请给出相同的黄色警告。很抱歉,我在回答时考虑了Firestore。我刚刚使用了一个版本,使用您的代码进行了编辑,该版本将等待所有更改承诺已经完成。我也尝试了这段代码。但是,它不起作用。执行后,数据库被更改为这样。
myKey1:“[object object]1”myKey2:“[object object]1”myKey3:[object object]1”
这是因为您的更新代码是针对结构的
myRoot->myKeyN->number
。如果您的数据库结构是
myRoot->myKeyN->myValue->number
,它将显示您的结果。要使用第二个结构实现您想要的结果,您应该将
child('myValue')
附加到
const ref=db.ref(myRoot).child(键);
const arr = ['myKey1' , 'myKey2' , 'myKey3'];
const db = firebase.database();

Promise.all(arr.map(key => {
    const ref = db.ref(myRoot).child(key);
    return ref.transaction(function(myValue) {
      return (myValue || 0) + 1;
    })
  }))
  .then(() => this.props.navigation.goBack())
  .catch((error) => console.log(error))