javascript - Angular 与 TypeScript - 如何在可观察回调中处理业务逻辑?

标签 javascript angular typescript observable angular-httpclient

我正在尝试使用 Angular HttpClient 调用获取一些数据并在成功时返回一些内容,如下所示:

    return this.http.post('api/my-route', model).subscribe(

        data => (
            this.data = data;
            return $window.location = ReturnUrlService.getAbsolute('/my-other-route');
        )
    )

为什么我不能这样做?我的应用程序是 Angular 4.3 和 TypeScript 2.6.2 我的理解是箭头函数应该相当于这个回调:

function(data) {
        this.data = data;
        return $window.location = ReturnUrlService.getAbsolute('/my-other-route');
}

...我将“数据”视为 JQuery AJAX 中的“成功”回调。订阅是否在某种程度上仅限于设置类内属性的值?我的箭头函数出了什么问题?我知道我错过了一些基本的东西!

最佳答案

如果“主体”是表达式,则只能使用 ()。你的“ body ”有两个陈述:

return this.http.post('api/my-route', model).subscribe(
    data => (
        this.data = data;
        return $window.location = ReturnUrlService.getAbsolute('/my-other-route');
    )
)

应该是:

return this.http.post('api/my-route', model).subscribe(
    data => {                                                    // <==== changed this line
        this.data = data;
        return $window.location = ReturnUrlService.getAbsolute('/my-other-route');
    }                                                            // <==== changed this line
)


return 语句

看来您只是想执行分配,而不是返回任何值。如果是这种情况,只需从最后一条语句中删除 return 关键字即可。


另一方面,如果您确实还想将该值返回给该函数的调用者,则不要使用 subscribe ,但其他函数只会转换 Observablesuch as map :

public myMethod(): Observable<any> {
  // ... create the model variable
  return this.http.post('api/my-route', model).map(
    data => {
        this.data = data;
        return $window.location = ReturnUrlService.getAbsolute('/my-other-route');
    }
  )
}

当然,请记住无论您在哪里调用myMethod,都要订阅结果:

public someOtherMethod() {
  return this.myMethod().subscribe(stuff => console.log(stuff));
}

关于javascript - Angular 与 TypeScript - 如何在可观察回调中处理业务逻辑?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49020929/

相关文章:

javascript - 为什么 Internet Explorer 不喜欢我的点击事件?

javascript - 如何查看远程脚本被阻止时返回的内容

javascript - 如何处理未在 Safari 上安装的自定义协议(protocol)仍然触发 onblur 事件?

html - 如果没有 href,如何使用 tab 键导航到 anchor 标记?

javascript - Angular 2 _this 未定义

javascript - Chrome 和 IE 返回不同的 SHA 哈希值

angular - Webpack 警告入口点大小限制 bundle.js

javascript - 在另一个类中调用函数时, typescript 函数返回未定义

node.js - 通过 npm link 和 typescript 本地开发的多模块

angular - 如何通过 Angular 4 中的共享模块正确导入 Angular Material 模块?