Я полагаю, что это связано с асинхронностью Javascript или чем-то подобным. Я только что прочитал о обещаниях и подумал, что это может решить мою проблему, но пока этого не произошло. В любом случае, вот фрагмент кода и то, что Im стремится достичь с ним:Итерация по нескольким классам (таблицам) parse.com и извлечению запросов
Сценарий: я хотел бы запросить 10 таблиц и получить последние сообщения (для этого примера, 1 сообщение) и сохранить это в словарь формата
<Class Name> : <Obj Id>
ниже фрагмент кода выполняет следующие действия, или пытается сделать следующее:
- построить массив с именем activeTables, который содержит список таблиц для запросов. Этот массив сам хранятся в отдельной таблице под названием Config
- Для каждого элемента массива activeTable, выполнить запрос по этому пункту, для последнего пункта и добавить его в словарь
Кажется просто, но вот результат Im получаю:
Предполагая, что мы бежим это на 3-х таблицах, называемых Table_1, Table_2, Table_3 и самые последние OBJS на каждой таблице: recent_1, recent_2, recent_3 соответственно, что я вижу на NewList это:
newlist = {
"Table_1" : ["recent_1", "recent_2", "recent_3"]
}
вместо:
newlist = {
"Table_1" : ["recent_1"],
"Table_2" : ["recent_2"],
"Table_3" : ["recent_3"],
}
и он бьет меня, что в то время как я был в состоянии запросить 3 таблицы и получить самую последнюю запись, только при вставке его в словарь, он отказывается, чтобы добавить новый ключ для каждой таблицы , если существует один ключ
(Кроме того, я использую обещания неправильно? Так как я все еще вижу знакомую пирамиду обратного вызова ад)
Фрагмент кода ссылки выше:
Parse.Cloud.job("scanLists", function(request, status) {
var activeTables = [];
var getclass = Parse.Object.extend("Config");
var query = new Parse.Query(getclass);
query.equalTo("Name", "ActiveTablesConfigObj");
query.find().then(function(activetables_obj) {
var newlist = {};
activeTables = activetables_obj[0].get("cObject").Active.slice();
for (var i = 0; i < activeTables.length; i++) {
var t_name = activeTables[i];
var get_atc = Parse.Object.extend(t_name);
var query_newlist = new Parse.Query(get_atc);
query_newlist.descending("createdAt");
query_newlist.find().then(function (newlist_obj) {
if (newlist.t_name === undefined) {
newlist[t_name] = [newlist_obj[0].id];
} else {
newlist[t_name].push(newlist_obj[0].id);
}
});
}
});
});
Действительно понравилось читать этот дань! Фантастическое резюме и предложения - и многое, чтобы убрать для меня и улучшить качество кода – wrecktangle