Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/457.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 初始化api后调用Angular$资源,导致返回值为空_Javascript_Rest_User Interface_Angularjs - Fatal编程技术网

Javascript 初始化api后调用Angular$资源,导致返回值为空

Javascript 初始化api后调用Angular$资源,导致返回值为空,javascript,rest,user-interface,angularjs,Javascript,Rest,User Interface,Angularjs,我试图建立一个基本的rpg像简单的网络游戏。我有一个java服务器,为纯html5应用程序提供RESTAPI 此应用程序具有按类别返回任务的服务。它还允许用户查看有关任务的详细信息。任务是通过RESTAPI完成的。我正在使用$resource依赖项阅读此api 问题是,我有一个定义如下的服务: (function( ng, app ) { "use strict"; // I provide a repository for the quests. app.servi

我试图建立一个基本的rpg像简单的网络游戏。我有一个java服务器,为纯html5应用程序提供RESTAPI

此应用程序具有按类别返回任务的服务。它还允许用户查看有关任务的详细信息。任务是通过RESTAPI完成的。我正在使用$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时,资源查询不会运行

如果我离开页面并重新访问它,查询将运行,任务数组将按照我预期的方式填充

我的问题是,为什么我的查询没有先运行?我觉得我缺少了一个非常基本的概念

该项目的git位于github上

正在运行的项目位于

如果你点击“任务”,然后点击“战斗”,返回一个关卡,再次点击“战斗”,你就能明白我的意思

由于某些原因,getQuestsByCategoryID函数在QuestbookAPI.query()之前运行,即使在声明服务时正确运行查询。。。我很困惑


我知道这和承诺有关。。。或者$q对象,但我不太确定如何使用。

$resource.query
调用都是异步填充的。不能保证调用会在所有其他代码运行之前执行


您的调用者应该是在
query
&中将其设置为
$scope
变量中运行回调的调用者。然后,您可以使用
$watch
检查分配并在数据到达后执行操作。

$resource.query调用都是异步完成的。不能保证调用会在所有其他代码运行之前执行。您的调用者应该是在查询中运行回调的人&将其设置为$scope变量。然后,您可以使用$watch检查作业,并在数据到达后做一些事情。@Fool您能用您的评论回答这个问题吗?我不久前做过这项工作,但这正是我所需要的。你的回答很好。完成了!感谢您的关注!