繁体   English   中英

在同一函数中解决承诺后返回承诺

[英]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);
            });

这里的数据不是第二个承诺,而是第一个,但问题是正确创建的

这里有几点。

  1. 使用.then(successCallback, errorCallback)而不是.success().error()
  2. .then()回调有一个参数,错误也是如此。
  3. 成功回调中的response对象还包含标头和状态。 您可以像这样访问它们: response.headersresponse.status (有关$http官方 AngularJS 文档中的更多信息)。
  4. 您可以创建一个$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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM