在同步步骤中执行多个HTTP请求

时间:2017-03-08 22:23:34

标签: javascript angularjs promise

我有一个用户列表,我想为每个用户进行API调用,如果所有结果都是针对所有用户的特定值,则为每个用户进行不同的API调用,再次检查所有用户的特定值。如果所有签出都要显示成功消息。

我想为每个用户发送所有的http调用,然后等待所有这些调用返回,然后再继续下一步。

以下代码是我到目前为止的问题,问题是成功消息为每个用户触发,并循环遍历每个用户。我努力将每一步转换为接受用户列表。

runAllChecks = function () {
    var users = [{
        id: 1,
        name: "User1"
    }, {
        id: 2,
        name: "User2"
    }, {
        id: 3,
        name: "User3"
    }
    ];
    users.forEach(function (user) {
        step1(user).then(function (data) {
            if (data.result === true) {
                return step2(user);
            } else {
                $scope.userErrors.push('Error on step1 from user ' + user.name);
            }
        }).then(function (data) {
            if (data !== undefined) {
                if (data.result === true) {
                    return step3(user);
                } else {
                    $scope.userErrors.push('Error on step2 from user ' + user.name);
                }
            }
        }).then(function (data) {
            if (data !== undefined) {
                if (data.result === true) {
                    alert("done!");
                } else {
                    $scope.userErrors.push('Error on step3 from user ' + user.name);
                }
            }
        });
    });
};

var step1 = function (user) {
    return $.get("https://api.xyz.com/step1/" + user.id).fail(function (response) {
        $scope.httpError = true;
        return $q.reject(response);
    });
};

var step2 = function (user) {
    return $.get("https://api.xyz.com/step2/" + user.id).fail(function (response) {
        $scope.httpError = true;
        return $q.reject(response);
    });
};

var step3 = function (user) {
    return $.get("https://api.xyz.com/step3/" + user.id).fail(function (response) {
        $scope.httpError = true;
        return $q.reject(response);
    });
};

0 个答案:

没有答案