在角度JS 1.1.5中,您可以取消之前启动的$ http调用.这两个link1和link2给出了它如何工作的一些解释.
但是我无法理解,如何在实践中使用它.我创建了plnkr来说明我想要实现的目标.
您可以在plnkr请求中看到并立即取消,但我希望最后一个请求成功.
我是angularjs的新手,所以我可能做错了.我已经完成了我能想象到的一切,但是没有完整的例子来表示canceler.resolve()
任何人都可以帮我这个或指导我正确的方向吗?
似乎很清楚如何设置一个全局方法来中止http请求.有点像
$scope.canceller = $q.defer();
var API = $resource('http:/foo.com', {}, {get: {
method:'GET',
timeout:$scope.canceller.promise
}});
$scope.abortRequests = function() {
$scope.canceller.resolve();
}
Run Code Online (Sandbox Code Playgroud)
但是,我希望能够仅中止特定请求.我可以为我需要能够中止的请求定义单独的资源,但这非常难看.当我调用可以允许超时有条件的$ resource时,有什么方法可以传入参数或其他东西吗?也许是这样的:
var API = $resource('http:/foo.com', {}, {get: {
method:'GET',
timeout:function() { if (FOO) { return $scope.canceller.promise; }}
}});
Run Code Online (Sandbox Code Playgroud)
但是如何访问FOO?
感谢您的任何见解!
我无法在Angular 1.2.13中创建成功的get请求.
var getProgress = function() {
var promise = $http({method: 'GET', url: 'http://localhost:8080/project/local/some/getStatus'});
promise.then(function(success) {
alert(JSON.stringify(success));
}, function(error) {
alert(JSON.stringify(error));
}, function(notify) {
alert(JSON.stringify(notify));
});
};
Run Code Online (Sandbox Code Playgroud)
所以我试图从我的REST Web服务接收一些JSON.为了测试该服务,我从浏览器(IE9,Firefox 27,Chrome 33)访问它可以在所有这些中正常工作.
上面的代码使用angular但总是提示我错误:
*{"data":"","status":404,"config":{"transformRequest":[null],"transformResponse":[null],"method":"GET","url":,"http://localhost:8080/project/local/some/getStatus""标题":{"接受":"application/json,text/plain,/ "}}}*
使用wireshark我检查HTTP请求和HTTP响应,从浏览器和角度返回200调用Web服务,以及所需的json对象!然而,角度提示我404.
当我从Firefox USING ANGULAR发出get请求并使用Findbugs进行调试时,在控制台中我获得了HTTP Code 200,然而Angular说404.尝试调整角度的代码无济于事,看不出有什么奇怪的.
上面的代码在IE9中正常工作!
任何建议表示赞赏.
我正在开发一个angularJS应用程序,这是我使用这个框架的第一个网站.在我的应用程序中,我需要在for循环中进行$ http调用.在下一次迭代之前的循环中,我想等待前一次调用的响应.什么是最好和最简单的方法来做到这一点.我已经尝试过使用callBack,$ q.all(),. then在所有这些中只有最后一个请求正在通过.请帮忙.
注意:我通过$ http调用的API无法对请求进行排队.
编辑: 我已经尝试了以下两种方法,在这两种情况下,只有最后一个请求成功.你能告诉我我在这里做错了吗?
方法1:
var promiseArray=[];
for(var i=0;i<items.length;i++)
{
var promise=services.Post(items[i]);
promiseArray.push(promise);
}
$q.all(promiseArray).then(data)
{
...
}
Run Code Online (Sandbox Code Playgroud)
方法2:
var promises = [];
for (var i = 0; i < items.length; i++) {
var deffered = $q.defer();
var promise = services.Post(items[i]);
promise.success(function(data) {
deffered.resolve(data);
})
promises.push(deffered);
}
Run Code Online (Sandbox Code Playgroud)
var result = $ q.all(promises);
编辑:2 服务代码:
Services.Post = function(lineItemId, submitUrl) {
var url = (submitUrl) ? submitUrl : Services.serviceUrl;
return $http.post(url, {
"LineItemID": lineItemId
}).
success(function(data, status, headers, …Run Code Online (Sandbox Code Playgroud) 处理http响应的Сommon方法是这样的:
return this._http.get(url)
.map((res: Response) => res.json());
Run Code Online (Sandbox Code Playgroud)
这提供了一个Observable<Object[]>其中Object被动态创建从JSON反序列化类型.然后你可以在*ngFor="let item of result | async"等等中使用这个结果......
我想获得一个特定的类型实例(意味着使用newoperator来调用类型的构造函数).尝试了不同的方法来实现这样的目标:
.map((res: Response) => { let obj = res.json(); return new MyObject(obj.id, obj.name);})
Run Code Online (Sandbox Code Playgroud)
但得到这个错误: Cannot find a differ supporting object '[object Object]' of type 'object'. NgFor only supports binding to Iterables such as Arrays.
这种方式似乎有效,但它过于复杂,可能无效:
.map((res: Response) => {
let results = <MyObject[]>[];
let obj = res.json();
obj.forEach(
function (o: any) {
results.push(new MyObject(o.id, o.name));
}
);
return results; …Run Code Online (Sandbox Code Playgroud) 如何为Java Project Reactor反应FluxAPI 创建Angular 4客户端?下面的示例有两个API:MonoAPI; 和,FluxAPI.两者都起作用curl; 但在Angular 4(4.1.2)中,只有MonoAPI有效; 任何想法如何让Angular 4与FluxAPI 一起工作?
这是一个简单的Spring Boot 2.0.0-SNAPSHOT应用程序,它带有MonoAPI和FluxAPI:
@SpringBootApplication
@RestController
public class ReactiveServiceApplication {
@CrossOrigin
@GetMapping("/events/{id}")
public Mono<Event> eventById(@PathVariable long id) {
return Mono.just(new Event(id, LocalDate.now()));
}
@CrossOrigin
@GetMapping(value = "/events", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
public Flux<Event> events() {
Flux<Event> eventFlux = Flux.fromStream(
Stream.generate(
()->new Event(System.currentTimeMillis(), LocalDate.now()))
);
Flux<Long> durationFlux = Flux.interval(Duration.ofSeconds(1));
return Flux.zip(eventFlux, durationFlux).map(Tuple2::getT1);
}
public static …Run Code Online (Sandbox Code Playgroud) 我有一个Web API 2控制器:
[HttpGet]
[Route("api/MyRoute/{date:datetime}")]
public IHttpActionResult Get(DateTime date)
{
return Ok(date);
}
Run Code Online (Sandbox Code Playgroud)
和有角的$ http get调用:
$http.get("/api/MyRoute/" + new Date());
Run Code Online (Sandbox Code Playgroud)
这不起作用,我收到404错误。
404之后,我也收到此错误:
XMLHttpRequest无法加载http:// localhost:2344 / api / MyRoute / 2017-06-28T00:00:00.000Z。对预检请求的响应未通过访问控制检查:请求的资源上不存在“ Access-Control-Allow-Origin”标头。
但是,如果我将参数更改为除日期以外的任何参数,它将起作用。
我已经尝试过新的Date()。toISOString(),并且做到这一点。
那么如何将日期从Angular传递到Web API控制器?
基本上如标题所述,我需要返回多个可观察值或一个结果。基本上,目标是加载并说出图书馆列表,然后根据该图书馆ID加载书籍。我不想在组件中调用服务,而是希望在页面加载之前先加载所有数据。
import { Injectable } from '@angular/core';
import { Resolve, ActivatedRouteSnapshot } from '@angular/router';
import { UserService } from './../_services/index';
@Injectable()
export class LibraryResolver implements Resolve<any> {
constructor(private _userService: UserService) {}
resolve(route: ActivatedRouteSnapshot) {
return this._userService.getLibraryList();
}
}
Run Code Online (Sandbox Code Playgroud)
如何先加载图书馆列表,然后再加载每个图书馆的图书信息并返回到我的组件?
PS:我的服务通过ID加载了此方法
this.userService.getLibraryBooks(this.library["id"]).subscribe((response) => {
...
Run Code Online (Sandbox Code Playgroud) 我是角度5的新手.如何编写一个通用函数来为角度为5的每个HTTP请求显示微调器.请帮我实现这个.
angular-http angular-http-interceptors angular angular-httpclient
我有一个Angular 5网站,它消耗着一个宁静的WCF Web服务。Web服务又与与数据库对话的业务对象进行交互。我正在使用@ angular / common / http模块将Web服务消耗到一个可观察的对象中,然后将其呈现在网页上。到目前为止,一切都很好。
现在,我还在通过Web服务更新数据库,它也可以正常工作。
但是,这有点慢,我希望能够通过更新Web服务调用直接并同时更新Observable,这样网站就不必等待数据通过Web服务通过Web服务了。企业资源规划业务对象到数据库的速度非常慢,然后又回落到Observable对象,通过异步管道更新屏幕。
因此,我心想,为什么不只用BehaviorSubjects代替Observables?然后,我可以只使用BehaviorSubject上的“ next”方法来快速更新页面。
但是,当我尝试...
public cartons$: BehaviorSubject<ICartonTrackDetail[]>;
this.cartons$ = this.cartonService.getCartonsObservable();
Run Code Online (Sandbox Code Playgroud)
我收到此错误...
Type 'Observable<ICartonTrackDetail[]>' is not assignable to type 'BehaviorSubject<ICartonTrackDetail[]>'.
Property '_value' is missing in type 'Observable<ICartonTrackDetail[]>'.```
Run Code Online (Sandbox Code Playgroud)
现在,该错误是有道理的,但它使我退后一步并想知道:实现目标的最佳方法是什么?