【问题标题】:Javascript / API Blank Resolved Promise and Non Global Data from RequestJavascript / API Blank Resolved Promise 和来自请求的非全局数据
【发布时间】:2018-09-13 11:39:20
【问题描述】:

我正在尝试设置然后获取从我正在使用的 API 返回的会话存储变量。 API 正在返回正确的值,这些值可以在返回结果及其状态的函数内访问,但不能在请求之外访问。请求:

var geom;

var latArray = new Array();

var longArray = new Array();

function getLatLong(placeIdent) {

service = new google.maps.places.PlacesService(document.createElement('div'));

request = {placeId: ""+placeIdent+""};

service.getDetails(request, function(result, status) {

if (status !== google.maps.places.PlacesServiceStatus.OK) {

console.log(status);

} else {

  writeLatLongData(result);

  while(geom != "") {

    lat = geom.lat();
    latArray.push(lat);

    long = geom.lng();
    latArray.push(long);

    console.log(geom);
    console.log(lat);
    console.log(long);

    timeout();

  }

}

}

)

}

function writeLatLongData(result) {

  geom = result.geometry.location;

  return geom;
}

我知道这个函数是问题的根源,但如果有任何帮助,我会尝试像这样访问存储的值:

   function timeoutOne() {

    setTimeout(function(){ 

    getGeometry(placeArray);

    }, 1000); 

}

timeoutOne();

function getGeometry(placeArray) {

for (var j=0; j < nightsArray.length; j++) {

    getLatLong(placeArray[j]);
}

}

我很确定这是一个异步问题,但我对 Async/await 不是很熟悉,而且我尝试过的所有操作都在解决承诺时返回一个空值(可能是因为无法在外部访问数据请求函数,仍然)。

有人有什么建议吗?

【问题讨论】:

    标签: javascript asynchronous async-await


    【解决方案1】:

    如果下面的条件成立怎么办,

    status !== google.maps.places.PlacesServiceStatus.OK
    

    您的 google places api 调用失败(可能是因为您每 10 秒调用过多),如果发生这种情况,将不会返回任何内容,从而使函数 getLatLong 返回未定义。

    检查该函数是否至少返回一次。

    【讨论】:

    • 感谢您的回复。我不确定这是不是问题,因为谷歌结果的 console.log 显示了一个更新的值。问题似乎与会话存储有关。
    • 你能创建一个这样的jsfiddle例子,这样我就可以玩了。
    • 我不愿意公开分享我的 API 密钥。我几乎可以肯定,现在,这是一个异步问题。我已经在帖子中更新了我的代码。如果您有任何想法,请告诉我。
    猜你喜欢
    • 2018-02-22
    • 1970-01-01
    • 2021-01-12
    • 1970-01-01
    • 1970-01-01
    • 2015-02-06
    • 1970-01-01
    • 2019-09-22
    • 2023-03-27
    相关资源
    最近更新 更多