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)实现同样的功能。真正的实现稍微复杂一些,并进行一些缓存。但是你给了我一些想法。我需要花更多的时间研究内置操作符,谢谢!