我正在尝试构建一个基本的 rpg,比如简单的网页游戏。我有一个为纯 html5 应用程序提供休息 api 的 java 服务器。
此应用程序具有按类别返回任务的服务。它还允许用户查看有关任务的详细信息。任务是通过 rest api 给出的。我正在使用 $resource 依赖项阅读此 api。
问题是,我有一个这样定义的服务:
(function( ng, app ) {
"use strict";
// I provide a repository for the quests.
app.service(
"questService",
function( $q, $resource, $http, _, categoryService ) {
var QuestbookAPI = $resource( 'http://174.126.249.6\\:8080/worldcraft/quests' , {}, { query: {method: 'GET', isArray: true} });
var quests = [];
QuestbookAPI.query(function(newQuests){
console.log("I ran !!!!! WOOTZORS . I am the questbook api query.");
quests = newQuests;
_.each(quests, function(quest){
quest.id = quest.questID.id;
quest.categoryID = quest.questCategory.id;
});
});
// ***** general questbook api
function getQuestByID( id ){}
function getQuestsByCategory( categoryId ){}
....
// ***** end general questbook api
// I get the quest with the given ID.
// Return the public API.
return({
getQuestByID: getQuestByID,
getQuestsByCategoryID: getQuestsByCategoryID,
getRandomQuestExcluding: getRandomQuestExcluding,
});
}
);
})( angular, Worldcraft );
由于某种原因,当使用此服务的控制器调用 getQuestsByCategoryID 时,资源查询不会运行。
如果我离开页面并重新访问它,查询就会运行,并且 quests 数组会按照我的预期填充。
我的问题是,为什么我的查询不先运行?我觉得我错过了一个非常基本的概念。
该项目的 git 在 github 上
https://github.com/ClinkWorks/Worldcraft-UI
正在运行的项目位于
http://www.clinkworks.com/worldcraft-ui
如果您单击任务,然后进行战斗,返回一个级别,然后再次进行战斗,您就会明白我的意思。
由于某种原因,getQuestsByCategoryID 函数在 QuestbookAPI.query() 之前运行,即使在声明服务时查询是正确运行的......我很困惑......
我知道它与承诺有关......或 $q 对象,但我不太确定如何。