我的控制器有一个激活方法,等待承诺在继续之前返回。
/* Assign values to new properties. */
private function initVars():void {
rtmpUrl = FlexGlobals.topLevelApplication.loaderInfo.parameters.rtmpUrl;
rtmpstreamName = FlexGlobals.topLevelApplication.loaderInfo.parameters.rtmpstreamName;
Security.allowDomain("X.X.X.X");
}
两个承诺都有类似的方法来获取数据,并且在datacontext.getNodeGroups()和datacontext.getNodes()方法中使用$ http。其中一个是这样的
function activate() {
var promises = [getNodesGroup(), getNodes()];
common.activateController(promises, controllerId)
.then(function () {
log('Activated');
});
}
直到现在,当我尝试将$ resource用于其中一个承诺(getNodes())时,一切正常。我的节点资源就是这样设置的
function getNodesGroup() {
return datacontext.getNodeGroups().then(function (response) {
$scope.nodeGroups = response.data;
//other logic
});
我试图像这样消费它
(function () {
'use strict';
var nodeServiceRoot = '/api/Nodes';
var GetAllNodesUrl = nodeServiceRoot + '/GetAllNodes';
angular.module('common.service')
.factory("nodeResource",["$resource","appSettings", nodeResource])
function nodeResource($resource, appSettings) {
return $resource(appSettings.serverPath + GetAllNodesUrl);
}}());
我不知道如何返回getNodes()以便我的激活函数在继续之前等待它。现在发生的事情是,有时两个函数都会在命中日志时运行('Activated');激活函数的行,有时只运行旧的$ http方法(getNodeGroups()),但不运行另一个。
答案 0 :(得分:1)
嗯,我猜答案非常简单。我在getNodes()中缺少'return' 那么对我有用的是
function getNodes() {
$scope.nodes = nodeResource.query();
**return** $scope.nodes.$promise.then(function (response) {
$scope.nodes = response;
//other logic
});