使用 Google Maps JS 的无限循环 API 地方详情调用 "open_now"

Infinite loop with Google Maps JS API place details call "open_now"

我正在使用 Google 地图 Javascript API 获取地点详情。截至昨天,我一直收到此错误:

RangeError: Maximum call stack size exceeded
    at Object._.Xm (common.js:1)
    at Object.get [as open_now] (util.js:213)
    at Object.get [as open_now] (util.js:213)
    at Object.get [as open_now] (util.js:213)
    at Object.get [as open_now] (util.js:213)
    at Object.get [as open_now] (util.js:213)
    at Object.get [as open_now] (util.js:213)
    at Object.get [as open_now] (util.js:213)
    at Object.get [as open_now] (util.js:213)
    at Object.get [as open_now] (util.js:213)

我的代码(在 Typescript 中)是:

async function getGooglePlaceDetails(placeId: string, sessionToken?: string) {
  const googleMapsClient = createClient({
    key: config.googleMapsServerAPIKey,
    Promise,
  });

  const response = await googleMapsClient
    .place({ placeid: placeId, sessiontoken: sessionToken })
    .asPromise();

  return response;
}

这对某些地方失败,例如 ChIJ71yZMAvSCl8RY1u0MpwXJXA ("Houheikyou hot springs")。

我该如何解决这个问题?

这似乎是版本 37 中包含的 util.js 的问题。您可以通过将 Google 地图 API 版本字符串更改为 v=quarterly 或36.

https://maps.googleapis.com/maps/api/js?v=quarterly&key=...&libraries=geometry,drawing,places

(将那些库换成你自己的)

详情请见:https://developers.google.com/maps/documentation/javascript/versions

此问题最近已得到修复。这也在 Google 的 Public 问题跟踪器中报告:https://issuetracker.google.com/issues/137213536

该问题是由于最近的地图 JavaScript API 版本 3.37 翻转引起的,Google 工程师已根据 public 错误修复了该问题。

请注意,切换到旧版本是一种临时解决方法,一旦旧版本被完全弃用,它将不再有效。如果新版本的错误在您这边仍然重现,您可以在上面的问题link上发表评论,以便工程师进一步调查。