gpt4 book ai didi

javascript - AngularJS - 正确格式化异步调用

转载 作者:行者123 更新时间:2023-12-03 03:51:00 25 4
gpt4 key购买 nike

这里是新手。

我试图了解如何在 Controller 中构建异步调用以适应我的特定用例:

考虑我的项目中“service.js”中 Angular 模块中的以下代码片段:

function getSearchObjects(projectName, title) {
var payload = JSON.stringify({
"title": title
});

var request = $http({
method: 'post',
url: URL + '/search/' + projectName,
data: payload
});
return request.then(handleSuccess, handleError);
};

function runQuery(projectName, fromDate, toDate, sort, direction, columns) {
var from = Date.parse(fromDate);
var to = Date.parse(toDate);

var payload = JSON.stringify({
"fromDate": from,
"toDate": to,
"sort": sort,
"direction": direction,
"columns": columns
});
console.log(payload);
var request = $http({
method: 'post',
url: URL + '/query/' + projectName,
data: payload
});
return request.then(handleSuccess, handleError);
}

function handleSuccess(response) {
return response.data;
};

function handleError(response) {
if (!angular.isObject( response.data ) || !response.data.error) {
return( $q.reject( "An unknown error occurred." ) );
}
return $q.reject( response.data.error );
};

});

在我的 Controller 中,我尝试对以下功能进行故障排除:

$scope.submit = function() {
var objectProperties = exportsStorageService.getSearchObjects($scope.selected.project.name, $scope.selected.search)
.then(function(result) {
exportsStorageService.runQuery($scope.selected.project.name, $scope.selected.start_date, $scope.selected.end_date, objectProperties.sort, objectProperties.direction, objectProperties.columns)
},
function(error) {
console.log(error);
});
};

getSearchObjects 与我的 UI 中选择的标题 ($scope.selected.search) 匹配,并从 API 调用中获取以下更详细的对象:

{ title: 'Duplication Example',
sort: '#_traac-timestamp',
direction: 'desc',
columns: [ '#_traac-remote_ip', 'c-platform-m-distinct-id_s', '_type' ] }

我试图获取从 getSearchObjects 返回的属性,并将它们与用户界面中的一些用户选择的值一起传递给 runQuery,然后 runQuery 将数据从数据库返回给用户,但是当我使用检查传递给 runQuery 的值时在我的 Controller 中执行上述逻辑,我得到以下值。我尝试传递给 runQuery 的所有 objectProperties 值均未定义:

project_name: "Example Project"
start_date: 1499770800000
end_date: 1499943600000
sort: undefined
direction: undefined
columns: undefined

我一直在尝试调试这个,但我对使用 Angular 和异步调用太陌生,无法真正理解我做错了什么。目前我最好的猜测是,我在从 getSearchObjects 检索到的值附加到 objectProperties 之前调用 runQuery。要么是我错误地引用了 objectProperties 变量中的属性。

有人可以帮助我解决此问题,并更好地了解我做错了什么吗?

预先感谢您的帮助!

最佳答案

当你这样做时:

var objectProperties = some async function...

您将异步函数的 promise 分配给变量,而不是它的结果

结果出现在 .then 中,就像你声明的那样:

.then(function(result) { ... }

所以,而不是 objectProperties.sort, objectProperties.direction, objectProperties.columns ,尝试使用 result.sort, result.direction, result.columns :)

如果您是 Promises 新手,请查看此 simple, but great tutorial .

<小时/>

编辑

根据您的评论,您将在response.data中收到以下对象:

{"objectMatch": {
"title": "doc-event",
"sort": "#_traac-timestam‌​p",
"direction": "desc‌​",
"columns": [
"m-doc-‌​name_s",
"m-user_s",
"‌​m-full-action-type_s‌​",
"m-event-action-de‌​scriptor_s"
]}
}

因此,您拥有:响应 > 数据 > objectMatch > 您想要的属性

您在handleSuccess上提取的response.data功能:

function handleSuccess(response) {
return response.data;
};

所以在这里,你的 resultresponse.data ,包含属性 objectMatch .

$scope.submit = function() {
var objectProperties = exportsStorageService.getSearchObjects($scope.selected.project.name, $scope.selected.search)
.then(function(result) {
...
},
...

如果所有这些都是正确的,您应该能够使用 result.objectMatch.<sort, direction or columns> 访问您想要的值,例如:

exportsStorageService.runQuery($scope.selected.project.name, $scope.selected.start_date, $scope.selected.end_date,
result.objectMatch.sort, result.objectMatch.direction, result.objectMatch.columns)

关于javascript - AngularJS - 正确格式化异步调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45153762/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com