2017-02-04 2 views
0

У меня есть массив идентификаторов пользователей, которые я хочу выполнить, выполняя поиск по базе данных, размещенной в parse.com. Я заканчиваю цикл через массив из 5 элементов, но все, что я получаю, - это 5 одинаковых записей. Каждая выводимая запись относится к последнему элементу массива. Пример: если в массиве у меня есть tom, dick, harry, jane и ben, тогда я получаю 5 записей, все отображают информацию ben.Проблема с использованием массива имен для поиска в базе данных parse.com

Можете ли вы взглянуть и рассказать мне, почему это может быть? Я правильно использую функцию «обещание»?

Спасибо!

function LookupAndPrintFriends(friendList) { 

      var userQuery = new Parse.Query(Parse.User); 
      var userobj; 

      // Do something with the returned Parse.Object values 
      var promise = Parse.Promise.as(); 

      alert("got here and there are this many friends: " + friendList . length); // returns 5 unique friend IDS 
      _.each(friendList, function (friendID) { 

       promise = promise.then(function() { 

        userQuery.equalTo("objectId", friendID); 
        userQuery.first().then(function (friendUserRecord) { 

         alert("i just did lookup on friend with id: " + friendID); // shows a different friend ID each time through the loop 

         alert("found him and his name is: " + friendUserRecord.get("firstname")); // always returns name of last friend in the array 
         userobj = friendUserRecord; 
         name = userobj.get("firstname") + " " + userobj.get("lastname"); 
         alert("found this friend name: " + name); // always shows name of last name in the array 

         myFriendsArray.push(name); 

        }); 

        return; 
       }); 

      }); //here 
      return promise; 
     } 

ответ

2

Вам просто нужно переместить строку userQuery внутри цикла.

var userQuery = new Parse . Query(Parse . User); 

В противном случае вы закончите условия гнездования и попросите первый в одиночку.

Я также рекомендовал бы использовать Promise.all с множеством всех обещаний вместо того, чтобы вставлять ваши обещания поочередно.

+1

спасибо, Rilke. Вот и все. Код работал в одно время, поэтому я, должно быть, переместил эту декларацию вверх и не заметил эффекта. Все еще кажется странным, что переменная, которая находится в запросе, не изменяет характер запроса. Вы должны выделить новый объект запроса для каждого выполняемого запроса? – phil

+1

Из документов: > Parse.Query определяет запрос, который используется для извлечения Parse.Objects. То есть каждый метод, который вы вызываете для объекта Query (в вашем случае '.equalTo'), просто определяет запрос перед его отправкой, используя вызов«. First ». – metame