Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 然后出现在异步返回值之前激发_Javascript_Angularjs - Fatal编程技术网

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

Javascript 然后出现在异步返回值之前激发,javascript,angularjs,Javascript,Angularjs,我得到了一个几乎和我的一样的错误。然后在异步调用完成之前触发。我意识到我正在循环api post,但我目前只在数组大小为1的情况下尝试它 服务: this.saveTags = function (tag) { $http({ method: "POST", url: '/api/projects/' + data.Id + '/tags', data: ({ Name: tag.Name })

我得到了一个几乎和我的一样的错误。然后在异步调用完成之前触发。我意识到我正在循环api post,但我目前只在数组大小为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)
            });
        });
错误:


您需要从函数返回一个承诺,该承诺在
$http
POST请求完成时被解析或拒绝

看起来您正试图从
$http
函数本身返回
拒绝
解析
产品,而
保存标签
函数最终没有向其调用者返回任何内容(即从
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;
}   

我认为问题可能来自data.saveTags(tag).then(function())不返回任何内容。另外,当我将$http的结果分配给变量并使用变量时,我有更好的经验。然后(…);。除此之外,这是一个很好的结构和一个很好的答案。@allencoded不知道你的意思。您报告的错误显示您正在尝试调用未定义的
,然后调用
。您的
saveTags
函数没有使用
then
方法返回对象。如果您返回deferred.promise,即使您的$http调用没有返回结果,您仍然会使用
then
方法返回一些内容,这将防止出现错误。是否有幸修复此问题?