如何处理修改同一变量

时间:2016-12-03 17:03:32

标签: javascript angularjs firebase promise

使用Ionic框架和Firebase构建JS应用程序。

我希望该应用根据用户访问的国家/地区向每个用户建议要与之讨论的用户列表。在建议列表中首先是最常见国家/地区的用户,而不是当前用户。

我在Firebase中有两个表:

"users" : {
"userA" : {
  "countries" : [ {
    "id" : 4,
    "name" : "france"
  }, {
    "id" : 2,
    "name" : "spain"
  } ]
},
"userB" : {
  "countries" : [ {
    "id" : 4,
    "name" : "france"
  }, {
    "id" : 2,
    "name" : "russia"
  } ]
},
"userC" : {
  "countries" : [ {
    "id" : 4,
    "name" : "france"
  }, {
    "id" : 2,
    "name" : "spain"
  } ]
}

索引表:

"country_user" : {
  "france" : { "userA" : true, "userB" : true, "userC" : true },
  "spain" : { "userA" : true, "userC" : true },
  "russia" : { "userB" : true }
}

在前端,我希望$ scope.matches存储按上述说明排列的用户列表。

在服务器端,我实现了以下逻辑:

  1. 检索当前用户访问过的国家/地区列表并返回与这些国家/地区的承诺
  2. 对于每个国家/地区,请在表country_user中检索与此国家/地区对应的用户列表
  3. 创建"匹配"数组,解析2的每个结果并更新"匹配"阵列
  4. 承诺1:

    function getUserCountryListPromise(_uid){
            return firebase.database().ref('users/' + user.uid + '/countries/').once('value').then(function(snap){
              var userCountryList = [];
              if(snap.exists()){
                snap.forEach(function(country){
                  userCountryList.push(country.val().name);
                });
              }
              return userCountryList;
            });
          }
    

    我开始实施2但我被困住了:

    function getRegistrationsToCountries(_country){
            return firebase.database().ref('/country_user/' + _country).once('value').then(function(snap){
              if(snap.exists()){
                snap.forEach(function(registeredUser){
    
    
            });
          }
    

    如果是userA,我想两次调用getRegistrationsToCountries,只有当这两个调用完成时(但是调用的数量是动态的)我想解析它们以更新"匹配"列表,我想返回前端。

    有什么建议吗?

    由于

0 个答案:

没有答案