我有一个库函数,需要返回 promise ,以便在解决另一个 promise 后在数据库中发布某些内容。 我试图将 promise 串联起来,但没有成功。
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");
});
}
当我在代码中调用使用该库的函数时 它解决并正确发布问题,然后显示第一个 promise 的数据,而我需要第二个 promise 。
libraryAPI.postIssue(createIssue).then(function (data) {
console.log(data);
},function (error) {
console.log(error);
});
这里的数据不是第二个 promise ,而是第一个 promise ,但问题已正确创建
最佳答案
这里有几点。
- 使用
.then(successCallback, errorCallback)
而不是.success()
和.error()
。 .then()
回调有一个参数,错误也有一个参数。- 成功回调中的
response
对象还包含 header 和状态。您可以像这样访问它们:response.headers
和response.status
(更多信息请参阅 Official AngularJS Documentation for $http)。 您可以创建一个
$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"); }); }
关于javascript - 在同一函数中解决 promise 后返回 promise ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36852778/