Javascript Parse.com查询在事实发生后执行
当所有内容都发送到浏览器时,我无法执行listsQuery。我知道我需要一个承诺,但我的尝试到目前为止还没有成功。救命啊Javascript Parse.com查询在事实发生后执行,javascript,node.js,parse-platform,Javascript,Node.js,Parse Platform,当所有内容都发送到浏览器时,我无法执行listsQuery。我知道我需要一个承诺,但我的尝试到目前为止还没有成功。救命啊 function processNavigation(navigation) { var nav = []; _.each(navigation, function(navItems) { var navProperties = { name: navItems.get("Name"), longName: navItems.get("
function processNavigation(navigation) {
var nav = [];
_.each(navigation, function(navItems) {
var navProperties = {
name: navItems.get("Name"),
longName: navItems.get("LongName"),
icon: navItems.get("Icon"),
url: navItems.get("Url"),
module: navItems.get("Module"),
runScript: navItems.get("RunScript"),
sortOrder: navItems.get("SortOrder")
};
switch (navItems.get("Module")) {
case "lists":
var listsQuery = new Parse.Query("ListItems"); // This should return back! But it's async? Needs promise?
listsQuery.ascending("SortOrder");
listsQuery.find().then(
function(results) {
var list = [];
_.each(results, function(listItems) {
var listProperties = {
name: listItems.get("Name"),
subName: listItems.get("Subname"),
sortOrder: listItems.get("SortOrder")
};
});
list.push(listProperties);
navProperties["source"] = list;
},
function() {
res.send('error');
}
);
break;
default:
navProperties["source"] = null;
break;
}
nav.push(navProperties);
});
res.send(nav);
}
这应该给你一些东西继续下去,我不确定它是否会工作,但它应该向你展示的概念 您需要做的是创建一个承诺数组,因为它看起来像是您对数组中的每个项目执行查询,并且因为查询需要一些时间,所以在查询完成之前会发送您的响应。然后,您评估一系列承诺,并仅在这些承诺得到解决时才返回您的响应 我建议你把你的逻辑分成几个函数,因为这有点难理解 看一看
我试图使用上面的代码,但它仍然没有停止查询。我修改了代码以移除开关,使其更易于阅读,但仍然没有成功。
function processNavigation(navigation) {
var nav = [];
var promises = []
_.each(navigation, function(navItems) {
var navProperties = {
name: navItems.get("Name"),
longName: navItems.get("LongName"),
icon: navItems.get("Icon"),
url: navItems.get("Url"),
module: navItems.get("Module"),
runScript: navItems.get("RunScript"),
sortOrder: navItems.get("SortOrder")
};
switch (navItems.get("Module")) {
case "lists":
promises.push((function(navProperties){
var listsQuery = new Parse.Query("ListItems"); // This should return back! But it's async? Needs promise?
listsQuery.ascending("SortOrder");
listsQuery.find().then(
function(results) {
var list = [];
_.each(results, function(listItems) {
var listProperties = {
name: listItems.get("Name"),
subName: listItems.get("Subname"),
sortOrder: listItems.get("SortOrder")
};
});
list.push(listProperties);
navProperties["source"] = list;
promise.resolve();
},
function() {
promise.reject();
res.send('error');
}
);
})(navProperties))
break;
default:
navProperties["source"] = null;
break;
}
nav.push(navProperties);
});
Parse.Promise.when(promises).then(function(){
res.send(nav);
})
}