我是一个根据http.get调用返回布尔值的函数。
function checkValue (value) {
var defer = $q.defer();
var request = $http({
method: "get",
url: "someurl"
});
request.success(function (data) {
defer.resolve(data.response);
});
return defer.promise;
}
问题是返回值是这样的对象:
d {$$state: Object}
$$state: Object
status: 1
value: true
__proto__: Object
__proto__: d
我怎么解决?
答案 0 :(得分:4)
是的,你的函数正在返回一个Promise对象。 $$ state属性属于promise对象,由Angular在内部使用(由$$前缀建议),因此开发人员使用 Angular不会使用它。更有意思的是,承诺对象有一个"然后"可用于附加在promise被解析时调用的处理程序的方法。当与promise相关的延迟对象得到解决时,Promise会得到解决。
因此,您可以将代码用作
checkValue.then(function (data) {
// This is called when the XHR response comes in and
// defer.resolve() is called in the checkValue function.
});
但是,有一个更好的方法。使用承诺链。
这基本上不需要创建新的延迟对象。
function checkValue (value) {
return $http({
method: "get",
url: "someurl"
}).then(function (data) {
return data.response;
});
}
解释有关Promise如何工作的一切可能对于这篇文章来说太过分了。已经完成了awesome works。
但是,基本上,$ http已经返回一个承诺。所以你可以使用这个承诺,而不是创建一个新承诺。该函数的最终用法与上面的代码段完全相同。
BTW,.success()处理程序已弃用。所以最好开始在你的应用上使用.then()。
答案 1 :(得分:2)
由于您使用的是Promise,因此需要使用function checkValue (value) {
var defer = $q.defer();
var request = $http({
method: "get",
url: "someurl"
});
request.success(function (data) {
defer.resolve(data.response);
});
return defer.promise;
}
var promise = checkValue('Hello World');
promise.then(function(response) {
//success
console.log(response);
}, function(reason) {
//failed
console.log(reason);
});
回调才能获得响应或错误:
$http's
然后(successCallback,errorCallback,notifyCallback) - 无论如何 当承诺已经或将要解决或拒绝时,请拨打一个 成功或错误回调一旦结果异步 是可用的。使用单个参数调用回调: 结果或拒绝原因。另外,通知回调可能是 在之前调用零次或多次以提供进度指示 承诺得到解决或拒绝。
但优化的方法是使用var request = $http({
method: 'GET',
url: '/someUrl'
});
request.then(function successCallback(response) {
// this callback will be called asynchronously
// when the response is available
}, function errorCallback(response) {
// called asynchronously if an error occurs
// or server returns response with an error status.
});
内置承诺,而不是创建新的承诺。
console.log($('#notes').text());
答案 2 :(得分:0)
你应该试试这个,
function checkValue (value) {
return $q(resolve, reject) {
$http({
method: "get",
url: "someurl"
}).success(function (data) {
resolve(data.response);
}).then (function (error) {
reject(error);
});
}
}
这将解析您的数据