2017-12-14 19 views
0

私はこの問題を抱えています。その作業が、私にのデータを複写するととなり、解決策が見つからないようです。angular.foreach私に重複したデータを与えてくれます。

ここに私のコードです。

vm.peoplev2値

vm.peoplev2 = [{'userId': 'admin'},{'userId':'jonas'},{'userId':'maria'},{'userId':'johncena'},{'userId':'lorenz'}]; 

コントローラ

angular.forEach(vm.peoplev2, function (value, key) { 
     console.log(value.userId); 
     uploadService.getCurrentImg(value.userId).then(function (data) { 
     if (value.userId === data.data.user) { 
      vm.img.push(data.data); 
      console.log(vm.img); 
     } 
    }); 
}); 

uploadService

function getCurrentImg(data) { 
    return $http.get('/api/img/' + data); 
} 

経路

router.get('/img/:id', function (req, res) { 
    Img.findOne({ user: req.params.id }, function (err, img) { 
     if (err) { 
      res.status(404).send(err);; 
     } else { 
      res.status(200).send(img); 
     } 
    }); 
}); 

これはvm.img(オブジェクト)における結果である:それは、ジョナスとローレンツ2Xをフェッチだ

enter image description here

。これを修正するには?

ありがとうございます!どんな提案も非常に感謝しています。

答えて

1

非同期操作とループは、予測不可能な場合があります。

(あなた$http呼び出しでサービス中$timeoutを交換してください)

angular.module('plunker', []) 
.service('service', function($timeout) { 
    this.get = function(person) { 
    return $timeout(() => { 
     return { 
     '_id': ~~Math.random(), 
     'name': person.userId 
     } 
    }, 250) 
    } 
}) 
.controller('MainCtrl', function(service, $q) { 
    this.peoplev2 = [{ 
    'userId': 'admin' 
    }, { 
    'userId': 'jonas' 
    }, { 
    'userId': 'maria' 
    }, { 
    'userId': 'johncena' 
    }, { 
    'userId': 'lorenz' 
    }]; 

    $q.all(this.peoplev2.map(person => service.get(person))) 
    .then(results => { 
    console.log(results) 
    }) 
}); 

これは約束の配列を作成し、すべてが最終的な結果を返す前に実行するのを待ち:これらの線に沿って何かを試してみてください。

Plunk

+0

あなたのplnkrに何も表示されていません。あなたの答えを試してみてください。ありがとうございました。 – Priz

+0

コンソールを開いて実行します。それは完全な複製ではなくデモです。 – Phix

+0

私はこれがすでにプッシュされたデータを表示するアイデアを打ち負かすと思いますか?一度にすべてのimgデータを取得できますか? – Priz

関連する問題