返回 Promise 并从中创建 Observable 时出现 Typescript Angular2 错误

2024-03-14

我正在尝试从 ionics 检索令牌storage in getToken()并使用它refreshToken()通过将令牌传递给来查看令牌是否过期(this.jwtHelper.isTokenExpired(this.token)根据令牌是否过期返回 true 或 false。我已发表评论refreshToken()我收到以下错误

Error 1:

Error: TS2345:Argument of type '(response: Response) => void' is not assignable to parameter of type '(value: Response) => void'. Types of parameters 'response' and 'value' are incompatible. Type 'Response' is not assignable to type 'Response'. Two different types with this name exist, but they are unrelated. Property 'body' is missing in type 'Response'.

Error 2:

Error:(34, 46) TS2339:Property 'token' does not exist on type 'Promise<any>'.

My code

import {AuthHttp, JwtHelper, tokenNotExpired} from "angular2-jwt";
import {Observable} from "rxjs/Observable";
import {AuthService} from "../Services/Auth/auth.service";
import {Injectable} from "@angular/core";
import { Storage } from '@ionic/storage';
import {AlertController} from "ionic-angular";

@Injectable()
export class TokenProvider {

jwtHelper: JwtHelper = new JwtHelper();
token;

constructor(private authHttp: AuthHttp, private storage: Storage, private alertCtrl: AlertController) {
}

getToken(): Promise<any> {
  return this.storage.get('token').then(token => {
     this.token = token;
  });
}

refreshToken(): Observable<any> {

  return this.token = Observable.fromPromise(this.getToken())
    .flatMap(() => {
      if(this.jwtHelper.isTokenExpired(this.token))
      {
        return this.authHttp.get('localhost.api/refresh')
          .subscribe(   // ERROR 1 HERE
            (response: Response) => {
              this.token = response.json().token;  // ERROR 2 HERE
            },
            (error: Response) => {
              console.log(error);
            });
      }
    });
}

你没有导入Response在你的代码中。编译器可能对哪个感到困惑Response使用,因为您的打字中可能有多个定义:

import { Response } from '@angular/http';

另外,您不会返回内部的可观察值flatMap。您正在返回Subscription。返回原始可观察值,如下所示:

refreshToken(): Observable <any> {

    let observable = Observable.fromPromise(this.getToken())
     .filter(() => this.jwtHelper.isTokenExpired(this.token))
     .flatMap(() =>  this.authHttp.get('localhost.api/refresh'));
    observable.subscribe((response: Response) => {
            this.token = response.json().token;
        }, (error: Response) => {
            console.log(error);
        });
    return observable;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

返回 Promise 并从中创建 Observable 时出现 Typescript Angular2 错误 的相关文章

随机推荐

  • 从 MS SQL 中的 PHP PDO 存储过程返回 Select *

    对于未来的用户 这个问题的底部包含更正的工作代码 我知道 Select 不是最好的 但在这个示例中 我尝试从 php 调用存储过程并返回整个结果集 以便我可以在代码中循环遍历数组 这是我当前的存储过程 USE hanoncs AskMe G
  • 如何在codeigniter中获取http请求正文数据?

    我在从 IOS obj c 客户端将 JSON 编码数据发布到 CI 控制器时遇到问题 我相信我的问题与提到的问题相同here https stackoverflow com questions 8569150 codeigniter re
  • 在嵌套对象上使用 JsonConvert.DeserializeObject

    我想在加载应用程序时使用 JSON Net 来处理配置文件的解析 将所有 KVP 保持在同一范围内绝对没问题 不过 我想将其分解为子类别 例如 Settings WebServer Settings GameServer 等 为了便于阅读
  • ffmpeg从mp4中提取基本流

    我已经使用 Bambuser 的 ffmpeg 端口成功将 ffmpeg 库移植到 Android 我目前正在研究 ffmpeg 的源代码 特别是 ffplay c 和 api examples c 文件 我想从 Android 2 2 录
  • 找到 numpy 数组中最大的正方形

    我正在尝试解决这个算法问题 在 numpy 数组中找到只有一个值的最大平方 示例图片 我的代码花费了太多时间 有办法提高速度吗 import numpy as np answer 0 def allsame board memory boa
  • 使用单层感知器求解 XOR

    我一直听说 XOR 问题不能通过单层感知器 不使用隐藏层 来解决 因为它不是线性可分的 我知道没有线性函数可以区分类别 但是 如果我们使用像 sin 或 cos 这样的非单调激活函数 情况仍然如此吗 我想这些类型的函数可能能够将它们分开 Y
  • Caliburn.Micro:以编程方式创建和绑定视图

    我目前正在 Caliburn Micro 中尝试视图合成 我有一个工作示例 其中我通过 View Model 附加属性路由将多个基于用户控件的视图注入到我的主 shell 中 到目前为止 一切都很好 在我的应用程序中 我正在使用主要由 Wi
  • 多处理 numpy 未定义错误

    我正在使用以下测试代码 from pathos multiprocessing import ProcessingPool as Pool import numpy def foo obj1 obj2 a obj1 2 b numpy as
  • 聚合elasticsearch中的值数组

    我需要聚合一个数组 如下所示 两个文档示例 index log type travels id tnQsGy4lS0K6uT3Hwzzo g score 1 source state saopaulo date 2014 10 30T17
  • (int_1 += *pointer++ = int_2++) < int_3 是什么意思?

    我正在读书这个之前的答案 https stackoverflow com a 14164818 1894277其中有一段我无法理解的C代码 它本质上看起来像这样 if int 1 pointer int 2 lt int 3 continu
  • 当我尝试使用 CComObject 函数 CreateInstance 时,_pAtlModule 指针为空

    我正在开发 OPC OLE 过程控制 客户端程序 使用异步 CALLBACK 方法使用 KepServer 从 PLC 获取数据 但是我遇到了问题 CComObject
  • 为什么 bash 在 Windows 中冻结?

    我正在 Windows 中运行 bash 程序 该程序与 msys 和 mingw 一起安装 我正在尝试跑步 configure 但是 每当我这样做时 配置都会冻结 checking whether make sets MAKE 您能想到为
  • 如何使用 JDK 11/Maven/Eclipse IDE 运行 JavaFX 应用程序

    问题 从 Eclipse IDE 运行基于 Maven 非模块项目 项目名称 howdyjfx 的 JavaFX 应用程序会生成以下编译错误 ERROR Failed to execute goal org codehaus mojo ex
  • clearInterval() 不会停止 setInterval() - Firefox 扩展开发

    我正在修改篡改数据 这将允许我将其观察到的 HTTP 请求 响应发送到服务器 到目前为止 该功能已正确实现 下一步是自动化此过程 我希望使用 复选框 类型的工具栏菜单按钮来打开和关闭此功能 到目前为止 我在 XUL 中有这段代码
  • File.Copy 目标文件是目录,而不是文件。

    我可能没有正确执行此操作 并且浏览 MSDN 库对我没有多大帮助 我正在尝试将数据库从项目文件夹复制到另一个位置 我最初尝试了桌面 它指出该目录不可用 这就是我目前所拥有的 private string currentDb J Projec
  • 无法从多维数组的初始值设定项推断边界

    以下代码无法编译 int main int a 0 1 2 3 产生的错误消息是 error declaration of a as multidimensional array must have bounds for all dimen
  • Git 拉取 Push.default 警告

    当我将 git commit 推送到远程存储库时 出现了以下警告 clyde browns computer 2 bloccit clydiscope git commit m Installed gem faker and generat
  • 可折叠If语句

    我最近使用 PMD 嵌入 hudson 偶然发现以下警告 我的代码似乎受到了影响可折叠If语句 我并不完全理解 代码看起来像这样 list to be filled with unique Somethingness List list n
  • TypeError:无法在 IE 10 上获取未定义或 null 引用的属性“ngMetadataName”

    在 IE 10 中 我收到以下错误 但在 IE 11 中正常 类型错误 无法获取未定义或空引用的属性 ngMetadataName 该物业ngMetadataName已被发现于vendor js The Polyfills ts如下 BRO
  • 返回 Promise 并从中创建 Observable 时出现 Typescript Angular2 错误

    我正在尝试从 ionics 检索令牌storage in getToken 并使用它refreshToken 通过将令牌传递给来查看令牌是否过期 this jwtHelper isTokenExpired this token 根据令牌是否