我收到的错误几乎就像我的.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)
});
});
错误:
答案 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;
}