Javascript 然后出现在异步返回值之前激发
我得到了一个几乎和我的一样的错误。然后在异步调用完成之前触发。我意识到我正在循环api post,但我目前只在数组大小为1的情况下尝试它 服务: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 })
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
方法返回一些内容,这将防止出现错误。是否有幸修复此问题?