2016-12-05 3 views
1

Я хочу объединить два массива, но результат всегда равен нулю. Я не знаю, в чем проблема, это мой код:angular.extend не работает в приложении Angularjs, чтобы объединить 2 массива

$scope.messages=[]; 
$scope.messagesRecieved=[]; 
$scope.messagesSent=[]; 
Message.getMessengerMessages(localStorage.getItem("token"),localStorage.getItem("contact")).then(function(messages){ 


$scope.messagesRecieved=messages; 

}) 
console.log('le contact est '+localStorage.getItem("contact") +'Lutilisateur est '+localStorage.getItem("token")) 
Message.getMessengerMessages(localStorage.getItem("contact"),localStorage.getItem("token")).then(function(messages){ 


$scope.messagesSent=messages; 
for (var i=0; i<messages.length; i++) { 
    if(messages[i].read=='no'){ 
    Message.modifyRead(messages[i]._id); 
    } 
} 
}) 
angular.extend($scope.messages, $scope.messagesRecieved, $scope.messagesSent); 

Сообщение - это сервис.

+0

API 'Message' является асинхронным. Перетащите данные в массив '$ scope.messages' из * внутри * каждого блока' .then'. – georgeawg

+0

Возможный дубликат [Как вернуть ответ от асинхронного вызова?] (Http://stackoverflow.com/questions/14220321/how-do-return-the-response-from-an-asynchronous-call) – georgeawg

ответ

0

Я предполагаю, что вы используете только $scope.messagesRecieved и $scope.messagesSent в качестве промежуточных продуктов для получения $scope.messages, а не для управления видом.

Если да, то они могут исчезнуть и messagesRecieved/messagesSent могут быть доставлены вниз обещание цепочку, начиная с Promise.all() агрегировать ваши два Message.getMessengerMessages() обещания.

Также, чтобы объединить массивы, используйте newArray = array1.concat(array2).

// $scope.messagesRecieved = []; // not necessary unless there's a corresponding view element 
// $scope.messagesSent = []; // not necessary unless there's a corresponding view element 
$scope.messagesSent = []; // you only need to do this if you want to nullify a view element while the two async gets are underway. 

var receivedPromise = Message.getMessengerMessages(localStorage.getItem('token'), localStorage.getItem('contact')); 

var sentPromise = Message.getMessengerMessages(localStorage.getItem('contact'), localStorage.getItem('token')).then(function(messages) { 
    for(var i=0; i<messages.length; i++) { 
     if(messages[i].read == 'no') { 
      Message.modifyRead(messages[i]._id); // if Message.modifyRead() is async, this code block is a bit different 
     } 
    } 
}); 

Promise.all(receivedPromise, sentPromise).then(function(messagesRecieved, messagesSent) { 
    $scope.messages = messagesRecieved.concat(messagesSent); 
}); 
0

angular.extend Используется для объединения объектов, а не массивов. Вероятно, вы захотите использовать здесь Array.concat.

$scope.messages = $scope.messages 
         .concat($scope.messagesRecieved) 
         .concat($scope.messagesSent); 
+0

он все еще не работает –

+0

@julianaMorales Мне недостаточно информации для работы. Не могли бы вы рассказать о том, как это случилось? –

+0

, когда я отображаю $ scope.messages на вид, пустой –