我有库函数,需要返回承诺,在解析另一个承诺后在DB中发布内容。 我试图将承诺链接起来但不起作用。
postIssue: function (issue) {
return getUserConfiguration()
.success(function (response, status, headers) {
var token = headers("X-XSRF-TOKEN");
if (token) {
_cookie = token;
if (issue.isValid()) {
var url = _baseURL + "/api/issue/";
var data = JSON.stringify(issue);
var config = {
xhrFields: { withCredentials: true },
headers: { "X-XSRF-TOKEN": _cookie }
};
return $http.post(url, data, config);
}
else {
return $q.reject("Issue doesn't have valid fields to submit");
}
}
else {
$q.reject("There is no XSRF token on response header");
}
})
.error(function () {
$q.reject("Error getting user's configuration");
});
}
当我在我使用此库的代码中调用该函数时 它正确解析并发布问题,然后在我需要第二个承诺时显示第一个承诺中的数据。
libraryAPI.postIssue(createIssue).then(function (data) {
console.log(data);
},function (error) {
console.log(error);
});
这里的数据不是第二个承诺,而是第一个承诺,但问题是正确创建的
答案 0 :(得分:1)
这里有几点。
.then(successCallback, errorCallback)
而不是.success()
和.error()
。.then()
回调有一个参数,错误也是如此。response
对象还包含标题和状态。您可以像这样访问它们:response.headers
和response.status
(Official AngularJS Documentation for $http中的更多信息)。您可以创建$q.defer()
' ed变量并在结尾返回它(在逻辑中解析/拒绝它),或者立即返回$q.reject
或{{ 1}}。我已修改了您的代码,并在$q.resolve
之前添加了return
。
$q.reject