[英]Returning promise after resolving promise in same function
我有库函数,它需要在解决另一个承诺后返回在 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);
});
这里的数据不是第二个承诺,而是第一个,但问题是正确创建的
这里有几点。
.then(successCallback, errorCallback)
而不是.success()
和.error()
。.then()
回调有一个参数,错误也是如此。response
对象还包含标头和状态。 您可以像这样访问它们: response.headers
和response.status
(有关$http的 官方 AngularJS 文档中的更多信息)。 您可以创建一个$q.defer()
ed变量并在最后返回它(在逻辑中解决/拒绝它),或者立即返回一个$q.reject
或$q.resolve
。 我已经编辑了您的代码并在$q.reject
之前添加了return
。
postIssue: function (issue) { return getUserConfiguration() .then(function (response) { var headers = response.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 { return $q.reject("There is no XSRF token on response header"); } }, function (error) { return $q.reject("Error getting user's configuration"); }); }
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.