【问题标题】:RStudio Viewer throws errorRStudio 查看器抛出错误
【发布时间】:2017-09-16 08:37:06
【问题描述】:

问题

某些版本的 RStudio 在我的 javascript 小部件的查看器窗格中引发错误,而有些则不会。


代码

我为我的googleway 包创建了一个htmlwidget,用于绘制谷歌地图。

要重现此问题(如果确实是您的系统上的问题),您只需运行此代码

devtools::install_github("SymbolixAU/googleway")
library(googleway)
google_map(key = '')  ## you don't need a key to see the error

但如果您想查看地图,则需要Google Maps API key


说明

我遇到的问题是,在某些版本的 Rstudio 上,地图显示在 Viewer 窗格中,而在其他版本中则没有。

当我“检查”查看器(右键单击 > 检查 > 控制台)时,出现错误

SyntaxError:意外的标识符“i”。枚举语法中应为“in”或“of”。

哪个链接到 javascript 内的 for 循环(请参阅屏幕截图和 source code


今天早上我在导致错误的系统上升级了 Rstudio,但它仍然给出错误。

以下两个屏幕截图显示了两个不同的 Mac(均运行 OS Sierra)与 Rstudio,并带有示例

  • Rstudio v1.0.143 - 不工作
  • Rstudio v1.0.136 - 工作

为什么有些版本的 RStudio 会抛出错误,而有些则不会?

【问题讨论】:

  • 我投票决定将此问题作为题外话结束,因为在 RStudio 支持频道上询问它可能更好。
  • 不确定,但let 是 ES2015,所以旧版浏览器不知道如何使用它。你可以试试旧的var
  • @timelyportfolio - 这可能与它有关 - 更改为 var “修复”该问题,但随后停在另一个:data.find(x => x.id == _id),我怀疑这也会导致类似的问题:stackoverflow.com/a/35398031/5977215
  • @timelyportfolio - 我认为你已经一针见血了;将let 更改为var,并将.find(x => ...) 更改为更原始的循环已经解决了这个问题!
  • 但是,我仍然不确定为什么 let.find() 在旧版本的 Rstudio 中工作...

标签: r rstudio


【解决方案1】:

@timelyportfolio 的建议有助于(再次!)找到解决方案。

我不认为这个问题纯粹是由 Rstudio 引起的,或者涉及其他因素,尤其是小部件适用于旧版本时,但现在我将把它作为解决方案。

行中的let

for (let i = 0; i < data.calls.length; i++) {

并非所有浏览器都支持,因此将其更改为 var 对那一行(以及所有使用 let 的行)有效。

我还使用this method 在数组中查找值

data_.find(x => x.id === _id)

并非所有浏览器都支持此功能,因此恢复为

function findById(source, id) {
  for (var i = 0; i < source.length; i++) {
    if (source[i].id === id) {
      return source[i];
    }
  }
  return;
}

似乎也解决了这个问题。

瞧!

【讨论】:

  • 如果你真的想要,你可以使用reactR::babel_transform()进行转译。
猜你喜欢
  • 2019-01-05
  • 2016-08-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多