我的Angular JS函数在我的范围内有效,但不在我的云函数中

时间:2018-11-06 23:56:16

标签: javascript firebase firebase-realtime-database web-applications google-cloud-functions

我创建了一个可运行几个功能的Angular JS Web应用程序。

我的firebase数据库中有一个JSON对象数组,这是一个摘要:

[
  {
    "Name": "Deji",
    "id": 2
  },
  {
    "Name": "Sonia",
    "id": 3
  },
  {
    "Name": "Fabio",
    "id": 1
  },
  {
    "Name": "De",
    "id": 5
  },
  {
    "Name": "Darmian",
    "id": 6
  },
 {
    "Name": "Fred",
    "id": 7
  },
  {
    "Name": "Klaus",
    "id": 8
  },
]; 

下面是在范围内完美运行的相关功能:

$firebaseArray(orderedPlayers)
        .$loaded(function(loadedPlayers) {
        var normalizedPlayers = loadedPlayers.reduce(function(acc, next) { acc[next.id] = next; return acc; }, {});
        var selectedPlayers = $scope.pick.map(function(num){
            return normalizedPlayers[num];
        });
        $scope.players = selectedPlayers;

这会将$scope.pick(由6个数字组成的数组)的值与对象JSON数组中每个对象的id值相对应,以重现其id值与$scope.pick数组中的6个数字。

我在firebase云功能中尝试过的事情:

exports.sync = functions.https.onRequest((req, res) => {
  admin.database().ref('users').once('value').then(function (snapshot) {
    var updates = {};
    //get firebase reference
    return admin.database().ref("Player").child("playerweek12").once('value').then(function (dataSnapshot) {
        var orderedPlayers = dataSnapshot.val();
        snapshot.forEach(function (userSnapshot) {
          var users = userSnapshot.val();
          var selection = users.selection;

          //mapping function
          var normalizedPlayers = orderedPlayers.reduce(function(acc, next) { acc[next.id] = next; return acc; }, {});
                   var selectedPlayers = selection.map(function(num){
                return normalizedPlayers[num];
            });

            var pick = selectedPlayers ;

          updates[`/users/${userSnapshot.key}/week2`] = pick;

        });
        return admin.database().ref().update(updates).then(function () {
          return res.send('it worked');
        });
      });
  });
});

selection返回由用户选择的6个数字组成的数组(相当于上面的$scope.pick)。但是,在范围内完美运行的映射功能无法在firebase云功能中运行。

它返回以下错误:

TypeError: selection.map is not a function

该函数不能在云函数中直接运行吗?我运行了一个测试,选择返回了由用户选择的6个数字组成的数组。有办法使它起作用吗?也许在范围内使用$firebaseArray方法有帮助吗?

0 个答案:

没有答案