2016-04-15 18 views
0

これは私が見落としているか、それが私を殺しているので、正しくやっていないばかげたことだと思っています。角のサービス約束と空のオブジェクトを作成するlodash

これは、既知のマネージャIDに基づいて営業担当者のグループのデータベース(解析)をポーリングする角度コントローラの一部です。

最初のセクションでマネージャのステータスがチェックされ、グループmemberIdが返されます。

次に、結果のmemberIdに基づいて追加のグループメンバーを確認します。したがって、managerIdのグループを持つトップレベルのマネージャーがあり、それぞれに子グループに営業担当者IDがあります。

すべてがここにチェックアウトされています(それは、そこに到達する最も効率的な方法ではないかもしれませんが...今のところ、私はアプリ全体を書いていないいつか私はやり直します)。

注:LoggingServiceは単なるコンソールのconsole.log出力です。

問題は最後の約束変数であるmanagerGroupです。

最終的なLoggingService.info( ' - > managerGroup'、managerGroup)()の出力は次のとおりです。これは$ scope.pageDataの出力です。次のように:

Object 
    managerId: "sL0lGF3sYw" 
    groupMembers: Array [2] 
    0: Object 
     managerId: "fytsi64nkp" 
     salesGroup: false 
    1: Object 
     managerId: "gcMIA9xnn0" 
     salesGroup: Array [3] 
     0: "6MunY0xGvp" 
     1: "9O4ly8Coyw" 
     2: "K67ZSUsE0q" 

ここで私の脳は壊れています。私はmanagerGroup.groupMembers上でログを実行すると結果は次のとおりです。

["fytsi64nkp", "gcMIA9xnn0"] 

多分それは多分私は何かが欠けています、私のコードです。

var ClientAccess = Parse.Object.extend('ClientAccessLU'); 
    var query   = new Parse.Query(ClientAccess); 

    query.equalTo('managerId', userId); 

    query.first().then(function(results) { 
     // check for manager status 
     if (results) { 
      LoggingService.info('user is manager', results)(); 
      $rootScope.managerFlag = true; 
      // returns the current user managerID and group members 
      return results.attributes; 
     } else { 
      LoggingService.warn('user is not a manager')(); 
      $rootScope.managerFlag = false; 
      return false; 
     } 
    }).then(function(managerData) { 
     // create a default managerGroup 
     var managerGroup = { 
      'managerId': managerData.managerId, 
      'groupMembers': managerData.salesRepIds 
     }; 

     // check if members are managers of additional groups and build the inner group 
     lodash.each(managerGroup.groupMembers, function(member, index){ 
      UserLU.getGroupMembers(member).then(function(innerGroup){ 
       // add the innerGroup member id's to the main group 
       managerGroup.groupMembers[index] = { 
        'managerId': member, 
        'salesGroup': innerGroup.salesRepIds?innerGroup.salesRepIds:false 
       }; 
      }); 
     }); 
     return managerGroup; 
    }).then(function(managerGroup){ 
     // then check the innermost group for client sales data as these members are sales reps 
     LoggingService.info('-> managerGroup', managerGroup)(); 



     $scope.pageData = managerGroup; 
    }); 

ありがとうございます...ありがとうございました。

+0

'managerGroup.groupMembers'は配列かオブジェクトですか? – kiro112

+0

@ kiro112それは配列 – orderofout

答えて

0

私はmanagerGroup.groupMembersため、見直していたものを1として代わりにlodash.each

Promise.all(managerGroup.groupMembers, function (member, index) { 
    return UserLU.getGroupMembers(member) 
     .then(function(innerGroup){ 
      // add the innerGroup member id's to the main group 
      return member = { 
       'managerId': member, 
       'salesGroup': innerGroup.salesRepIds?innerGroup.salesRepIds:false 
      }; 
     }); 
}).then(function (managerGroupMembers) { 
    managerGroup.groupMembers = managerGroupMembers; 

    return managerGroup; 
}); 
+0

私は考えが好きですが、私はそれが動作するとは思わない...ロダッシュのビットは、すでに約束のチェーン内で実行されていた - Promise.allはthenableするべきではありません。たぶん私はそれをovercomplicatingしている。しかし、私は連鎖した約束の巣を制限したい。 – orderofout

+0

これは私のコードではうまくいかないのに、これは正しいとマークしています。これは別の連鎖した約束の中の連鎖した約束であり、うまくいきません...しかし、あなたは間違いなく私になぜ私が得ている反応を得ているので、それを解決することです。私はそれが動作するように自分のコードを書き直す必要があります。 – orderofout

0

の使用Promiseにあなたがあなたが非同期で以下のコードの実行として

var managerGroup = { 
      'managerId': managerData.managerId, 
      'groupMembers': managerData.salesRepIds 
     }; 

の出力を得ているログこのコードを完了する前に次に進む

lodash.each(managerGroup.groupMembers, function(member, index){ 
      UserLU.getGroupMembers(member).then(function(innerGroup){ 
       // add the innerGroup member id's to the main group 
       managerGroup.groupMembers[index] = { 
        'managerId': member, 
        'salesGroup': innerGroup.salesRepIds?innerGroup.salesRepIds:false 
       }; 
      }); 
     }); 

願っています。

+0

ロダッシュが帰る時間が来る前に次の約束事に移ります。そのため、@ kiro112がプロミスを使うことを示唆しています。これは理にかなっています。 – orderofout

関連する問題