Javascript 为什么这种解构不起作用?
我正在创建一个可观察的模型,如下所示:Javascript 为什么这种解构不起作用?,javascript,rxjs,observable,Javascript,Rxjs,Observable,我正在创建一个可观察的模型,如下所示: return new Observable(sub => { const {next, complete, error} = sub; this.AuthHttp.get(`http://192.168.1.100:3000/api/users/${id}`) .subscribe(res => { let user = res.json(); next(user
return new Observable(sub => {
const {next, complete, error} = sub;
this.AuthHttp.get(`http://192.168.1.100:3000/api/users/${id}`)
.subscribe(res => {
let user = res.json();
next(user);
complete();
}, e => {
error(e.json());
});
})
然而,当next()
被调用时,我的前端没有发生任何事情。如果我对代码做了一个小的更改,以便调用sub.next()
,那么一切都会按预期进行。这表明底层代码没有缺陷,就像我引用next
的方式一样
我以前在Observer类中见过这种形式的分解(在一个在线示例中),那么我在这里做错了什么呢?因为
下一个、错误和完成方法都是对象方法,必须在对象实例上调用
当您使用解构来获取函数并随后调用这些函数时,调用没有上下文
您无法执行尝试的操作,原因与此操作不起作用相同:
const { toString } = new Date();
console.log(toString());
有关更多信息,请参阅。当然!现在看来很明显,谢谢!我必须试着去挖掘我记忆中的例子,也许还要为他们指出这一点。出于好奇,从对象实例中提取方法永远都不安全吗?或者换句话说,我们如何确定方法何时是对象方法?如果所讨论的函数在其实现中没有使用this
,则只能在没有上下文的情况下提取和调用函数。因此,只有当你知道情况是这样,并且情况不会改变时,这才是“安全的”。这确实回答了这里的根本问题,我的好奇心肯定已经满足了,再次感谢你提供了如此简洁的答案和有益的阐述。请注意,对于这一点,你根本不需要创建这样一个可观察的东西。您可以使用内置操作符(catchError,map)实现同样的功能。真正的实现稍微复杂一些,并进行一些缓存。但是你给了我一些想法。我需要花更多的时间研究内置操作符,谢谢!