javascript - 在同一函数中解决 promise 后返回 promise

标签 javascript angularjs promise angular-promise

我有一个库函数,需要返回 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 ,但问题已正确创建

最佳答案

这里有几点。

  1. 使用 .then(successCallback, errorCallback) 而不是 .success().error()
  2. .then() 回调有一个参数,错误也有一个参数。
  3. 成功回调中的response对象还包含 header 和状态。您可以像这样访问它们:response.headersresponse.status(更多信息请参阅 Official AngularJS Documentation for $http)。
  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");
        });
    }
    

关于javascript - 在同一函数中解决 promise 后返回 promise ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36852778/

相关文章:

javascript - 如果我的脚本位于正文末尾,我应该使用 DOM 就绪函数吗?

javascript - 将当前项与原始数组绑定(bind)

javascript - Codeigniter 中的 JQuery Ajax POST 不起作用

javascript - 将先前 promise 中的数据放入新 promise 中

javascript - Promise.defer 的正确模式是什么?

javascript - 使用 Jquery Ajax 提交表单

javascript - 使用 Javascript 用不同的元素替换 Angular div

javascript - 使用 ng-click 更改按钮中的文本

AngularJS : ng-repeat's compile and link functions

javascript - 使用 mapDispatchToProps 时 promise 不返回