然后在异步返回值之前出现

时间:2014-05-15 16:19:59

标签: javascript angularjs

我收到的错误几乎就像我的.then在我的异步调用完成之前触发了。我意识到我正在为api帖子循环,但我目前只尝试使用数组大小​​为1。

服务:

this.saveTags = function (tag) {
        $http({
            method: "POST",
            url: '/api/projects/' + data.Id + '/tags',
            data: ({ Name: tag.Name })
        }).then(function (response) {
            console.log(response.data)
            if (typeof response.data === 'object') {
                return response.data;
            } else {
                // invalid response
                return $q.reject(response.data);
            }
        }, function (response) {
            // something went wrong
            return $q.reject(response.data);
        });

控制器:

 tags.forEach(function(tag) {
            counter++;
            data.saveTags(tag).then(function(data) {
                console.log(data)
            });
        });

错误:

enter image description here

1 个答案:

答案 0 :(得分:1)

$http POST请求完成时,您需要从已解析或拒绝的函数返回一个promise。

看起来您试图从reject函数本身返回resolve$http个产品,而您的saveTags函数最终没有返回任何内容调用者(即来自你的forEach循环)。

试试这个:

this.saveTags = function (tag) {
    var deferred = $q.defer();

    $http({
        method: "POST",
        url: '/api/projects/' + data.Id + '/tags',
        data: ({ Name: tag.Name })
    }).then(function (response) {
        console.log(response.data)
        if (typeof response.data === 'object') {
            deferred.resolve(response.data);
        } else {
            // invalid response
            deferred.reject(response.data)
        }
    }, function (response) {
        // something went wrong
        deferred.reject(response.data)
    });

    return deferred.promise;
}