在这篇文章中
var deferredRespond = $q.defer();
var statusNotice="Loading...";
deferredRespond.notify(statusNotice);
$http.post(processorUrl,{
params:request,
}).success(function(respondData){
//deferredRespond.resolve(respondData);
/*For Test Rejected Defer! -awh*/
deferredRespond.resolve($q.reject("Simulated Reject"));
//deferredRespond.resolve($q.notify("Simulated LOADING..."));
})
.error(function(){
deferredRespond.reject('Failed defer!');
});
我可以通过执行.resolve($q.reject
来模拟.reject但是我想知道为什么我不能通过执行.resolve($q.notify
来测试.notify(它会返回undefined的错误)?还有其他方法可以测试.notify吗?
谢谢
答案 0 :(得分:1)
通知回调是then
语法的一部分,可用于提供流程的状态。
如果您想通知您不应将deferredRespond.resolve
与$q
一起使用,您只需要直接调用延迟对象的notify方法:
deferredRespond.notify('Simulated LOADING...');
您可以使用then
订阅所有三种情况:
deferredRespond.promise.then(function(data) {
console.log('resolved', data);
},
function(data) {
console.log('rejected', data);
},
function(data) {
console.log('notified', data);
});
请注意,then
中的第一个回调函数对应于分辨率,第二个回复函数对应于拒绝,第三个回调函数对应于deferredRespond.notify
发送的通知。