在Angular 2中,如何在没有可观察性的情况下调用http方法
当我调用这个函数时,console.log()可以工作,但是http.delete方法从来没有运行过,我假设是因为我还没有订阅observable 因为我是通过表单上的按钮打电话的,我不在乎返回任何东西,所以有没有办法直接打电话在Angular 2中,如何在没有可观察性的情况下调用http方法,angular,Angular,当我调用这个函数时,console.log()可以工作,但是http.delete方法从来没有运行过,我假设是因为我还没有订阅observable 因为我是通过表单上的按钮打电话的,我不在乎返回任何东西,所以有没有办法直接打电话 deleteCompany(id) { console.log('from data service: ', id); this.http.delete(this.url + 'Companies/' + id + '?' + this.t
deleteCompany(id) {
console.log('from data service: ', id);
this.http.delete(this.url + 'Companies/' + id + '?' + this.token).map(res => res.json());
}
编辑:
我选择了这个。这是正确的处理方法吗
import 'rxjs/add/operator/toPromise';
...
return this.http.delete(this.url + 'Companies/' + id + '?' + this.token).toPromise();
不。observable是懒惰的,在调用
subscribe
或toPromise
之前不会做任何事情。正如@Gunter所指出的,如果你想使用observable,你需要调用subscribe
。如果您希望返回某些内容(因为承诺不是懒惰的),可以将可观察的
转换为承诺
,如下所示:
import 'rxjs/add/operator/toPromise';
deleteCompany(id) {
console.log('from data service: ', id);
return this.http.delete(this.url + 'Companies/' + id + '?' + this.token).toPromise();
}
要使用它,请在组件中使用然后
而不是订阅
。e、 g:
this._yourServiceName.deleteCompany(this._id).then((data)=> console.log(data), (err) => console.log("error occured", err););
编辑:“看起来不错。您还可以调用
subscribe()
,而无需传递回调。我想这会让我们更清楚地知道目的是什么。谢谢你的回答。为了确保我理解(我对这一点很陌生),在您的示例中,您正在映射响应,以便我在组件中使用一些东西,然后使用.promise实际触发http调用,对吗?既然我注意到你没有使用它,“return”怎么会适合这个呢?你是对的。我忘了返回可观察的(现在编辑)。通常,我们使用map
(或任何其他方法)来转换数据流。使用map(res=>res.json()
将把响应解析为json,我们在这里不需要使用它。toPromise
方法将返回一个承诺,该承诺将使用组件中的然后方法来解析。