Angular 2. 在 Promise 中失去 this 的范围

2024-03-09

我觉得我在这里错过了一些东西。我有一项可以获取一些数据的服务。我将其转换为承诺,然后尝试以单独的方法处理数据。

一旦它命中该方法,我就失去了访问我通常从 this.whatever 访问的对象的能力。如果我将 addJobsToTree 中的所有代码保留在 then 块中,则它可以正常工作。我还可以从组件中的任何其他位置访问它。我确信我在做一些愚蠢的事情,但无法弄清楚。

ngOnInit(){
    this._scheduleDataService.getSavedScheduleData(this.buildDateStringFromCalendar(),1004)
        .toPromise()
        .then(this.addToJobsTree);
}
private addToJobsTree(res){
    for(let xx of res){
        this._sharedService.jobs.push(xx); //Comes back as cannot read _sharedService of null
        console.log(this._sharedService.jobs);
    }
}

这是因为您引用了一个函数,并且丢失了该函数的上下文。要解决这个问题,您需要显式地将函数链接到对象。

您可以使用bind method:

ngOnInit(){
this._scheduleDataService.getSavedScheduleData(this.buildDateStringFromCalendar(),1004)
      .toPromise()
      .then(this.addToJobsTree.bind(this); // <-----
}

(note:这是使用的缺点bind使用 TypeScript 的方法:https://basarat.gitbooks.io/typescript/content/docs/tips/bind.html https://basarat.gitbooks.io/typescript/content/docs/tips/bind.html)

或箭头函数来解决这个问题:

ngOnInit(){
this._scheduleDataService.getSavedScheduleData(this.buildDateStringFromCalendar(),1004)
      .toPromise()
      .then((data) => { // <-----
        this.addToJobsTree(data);
      });
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Angular 2. 在 Promise 中失去 this 的范围 的相关文章

随机推荐

  • PHP 获取前一个数组元素并知道当前数组键

    我有一个带有特定键的数组 array 420 gt array 430 gt array 555 gt array 在我的应用程序中 我知道当前的密钥 例如555 我想获取前一个数组元素 在此示例中 它是带有键的数组元素430 我怎样才能在
  • MQTT:如何知道 puback 是针对哪条消息的?

    我正在尝试设置一个 MQTT 服务器 它将客户端发送的消息保存到本地数据库中 每条消息都有一个 成功接收 标志 当接收客户端为收到的每条消息 QOS 1 返回 puback 时 我想翻转该标志 问题是 当我发布消息时 服务器正确接收从接收客
  • Symfony 2 多个应用程序?

    这似乎是与 Symfony2 相关的最可怕的话题 因为经过一周的搜索和测试 我仍然找不到答案 简而言之 我正在构建一个具有多个子域的应用程序 我希望为所有子域提供不同的配置 同时共享来自 src 的多个捆绑包 更重要的是 导入中央配置和路由
  • Spring Data JPA:删除乐观锁定语义

    有一个实体Foo with a Version柱子 如果我想删除它 我希望 Spring Data JPA 和 或 Hibernate 检查 Version列与数据库中的列匹配 如果不符合 则应拒绝删除 对于独立实体来说 这可以按预期工作
  • 为什么在 Javascript 的 array.forEach 回调中提供数组参数?

    Javascript 的数组迭代函数 forEach every some等 允许您传递三个参数 当前项 当前索引和正在操作的数组 我的问题是 与通过闭包访问数组相比 将数组作为参数进行操作有什么好处 我为什么要使用这个 myArray f
  • Github Desktop - 作者身份未知

    我正在使用 github 桌面上传一些基本网站的代码 然后使用 github 页面 但是 每次我尝试提交到 main 时 都会出现错误 提示 作者身份未知 我知道我必须将我的姓名和电子邮件放入文件中 但是其中有两个带有 JavaScript
  • 可变参数函数 - 如何确保参数正确传递

    有没有什么方法 内置或代码模式 来确保向可变参数函数传递正确数量的参数 显然 这将作为 API 的一部分包含在内 我可以检查我自己的内部代码 我正在考虑要求 UN32 Magic Number 作为最后一个传递的参数 并检查可变参数函数的有
  • “tensorboard”不被识别为内部或外部命令,

    刚刚开始使用 Tensorflow 但我无法在 cmd 上使用 tensorboard 命令 它给出了错误命令 C Users tushar PycharmProjects gt tensorboard logdir NewTF tenso
  • AngularJS 和 ReactJS 之间的主要区别是什么

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我需要创建一个将转换为移动应用程序的网站 我想要构建的内容更适合成为网站而不是应用程序 因此建筑物本身应该作为网站 由于我更熟悉桌面和
  • Camel Apache:从接收到的 XML 中提取一些值的 xpath

    在我的 Camel 路由期间 我查询服务器 HTTP GET 结果 我收到一个 200 OK 其 XML 正文看起来类似如下
  • PHP websocket 连接到 node.js 服务器

    我有简单的 node js websocket 服务器 var fs require fs var ws require var options secure false var Server ws createServer options
  • 从 Graph API 中删除照片标签

    我正在尝试创建一个应用程序来帮助用户删除不需要的标签 我听到很多人抱怨 FB 不再允许公众访问删除图片 标签也是如此吗 I get error type OAuthException message 3 Application does n
  • 无法从存储“C:\Users\....\.android\debug.keystore”读取密钥 AndroidDebugKey:密钥库格式无效

    我正在尝试在 android studio 中发布一个简单的项目 所以我转到菜单 gt 构建 gt 构建 apk 但是我收到此错误 Error Execution failed for task app packageDebug gt Fa
  • 将球体映射到立方体

    这里描述了一种将立方体映射到球体的特殊方法 http mathproofs blogspot com 2005 07 mapping cube to sphere html http mathproofs blogspot com 2005
  • INNER JOIN 与“FROM”中的多个表名[重复]

    这个问题在这里已经有答案了 可能的重复 INNER JOIN 与 WHERE 子句 有什么区别 https stackoverflow com questions 1018822 inner join versus where clause
  • 检查引用完整性是否被破坏

    在我的过程中 我做了类似的事情 SET FOREIGN KEY CHECKS 0 LOAD DATA INFILE path to mytable txt INTO TABLE mytable SET FOREIGN KEY CHECKS
  • ANTLR:乘法省略“*”符号

    我正在尝试创建一个用于乘法和除法的语法 其中不需要包含 符号 我需要它来输出 AST 所以对于这样的输入 1 2 3 4 我希望 AST 是 1 2 3 4 我发现了以下内容 它使用 java 代码来创建适当的节点 grammar Test
  • 如何防止 Eclipse 自动关闭 TERMINATED lauches 控制台日志?

    After应用程序启动 执行终止 所以它不再运行 它的控制台日志保留在那里供审查 直到我们开始另一次执行 当发生新的执行时 即使是来自 ant 自动构建 所有终止的启动控制台日志都会自动关闭 那么 如何避免控制台日志自动关闭终止启动 执行
  • Lua:Lua 中具有线程结构的抢占式(非协作式)多任务处理

    我想知道 Lua 是否有内置的抢占式多任务处理工具 我想在我的多核系统上使用并发线程 我研究了协程 参见 lua users org wiki CoroutinesTutorial 和 stackoverflow com questions
  • Angular 2. 在 Promise 中失去 this 的范围

    我觉得我在这里错过了一些东西 我有一项可以获取一些数据的服务 我将其转换为承诺 然后尝试以单独的方法处理数据 一旦它命中该方法 我就失去了访问我通常从 this whatever 访问的对象的能力 如果我将 addJobsToTree 中的