当前位置: 首页 > 知识库问答 >
问题:

在地理位置中保存对象数据。getCurrentPosition(axios请求的异步函数)(javascript)

太叔豪
2023-03-14

我需要存储position.coords.(纬度/经度)内的对象外声明的navigator.geolocation.get货币位置()。

async axiosRequest (usage) {
    var options = {}
    ...
    } else if (usage === 'gps') {
      navigator.geolocation.getCurrentPosition((position) => {
        options = {
          method: 'GET',
          url: 'https://api.waqi.info/feed/geo:' + position.coords.latitude + ';' + position.coords.longitude + '/',
          params: {
            token: process.env.VUE_APP_AICQN_API_KEY
          }
        console.log(options) // {...} that's work !!
        }
      });
      console.log(options) // {} ???
    }
    ...
    try {
      const response = await axios.request(options)
      return response.data
    } catch (error) {
      console.error(error)
    }
}

我不明白为什么选项是空的 ( {} ) 在console.log()。如何在回调箭头函数中设置选项数据?

提前感谢!

共有2个答案

东方飞捷
2023-03-14

您已经在回调中设置了选项数据,但是尝试控制台是错误的。以这种方式记录,实际上是在代码中,即第二个控制台中。log将在第一个和回调本身之前执行,您正在调用异步工作的Geolocation Browser API,并在完成后调用回调函数,但首先,js引擎将恢复当前执行上下文并完成堆栈中的所有调用,

阅读更多关于:

AsyncRouse JS,

事件循环,

......

简而言之,在设置数据后,您需要立即对选项执行任何操作,您需要在回调中执行/call/trigger:

async axiosRequest (usage) {
    var options = {}
    ...
    } else if (usage === 'gps') {
      navigator.geolocation.getCurrentPosition((position) => {
        options = {
          method: 'GET',
          url: 'https://api.waqi.info/feed/geo:' + position.coords.latitude + ';' + position.coords.longitude + '/',
          params: {
            token: process.env.VUE_APP_AICQN_API_KEY
          }
        };
   
        try {
          const response = await axios.request(options)
          ....
        } catch (error) {
          ....
        }
      });
    }
}

为了能够从这个函数返回一个值,我建议你改变你的代码结构,你可以用一个promise包装getMONtPosition,检查这个答案

刘瀚
2023-03-14

你可以用这样的promise:

import { request } from "axios";

const axiosRequest = async (usage) => {
  if (usage === "gps") {
    let getCurrentPositionOptions = new Promise((resolve, reject) => {
      navigator.geolocation.getCurrentPosition((position) => {
        const options = {
          method: "GET",
          url:
            "https://api.waqi.info/feed/geo:" +
            position.coords.latitude +
            ";" +
            position.coords.longitude +
            "/",
          params: {
            token: process.env.VUE_APP_AICQN_API_KEY
          }
        };
        return resolve(options);
      });
    });

    const options = await getCurrentPositionOptions;
    console.log(options);

    if (!options) return false;

    try {
      const response = await request(options);
      return response.data;
    } catch (error) {
      console.error(error);
    }
  }
};

你可以在这里看到一个工作示例。你可以阅读更多关于promise的信息。

 类似资料:
  • 问题内容: 如何在Rails 3中存储和处理网站用户的地理位置(经度和纬度),以便它检查是否在每个页面请求中我们已经在该用户的会话中保存了这些详细信息(如果我们正在不保存详细信息,那么我们应该从浏览器中请求用户的位置,然后将这些详细信息存储在会话中)? 问题答案: 根据您的要求,我会说您实际上并不需要ajax,因为大多数处理将使用JS(要求用户访问其位置,解析响应等)完成,因此我将使用JS设置一个

  • bugu-mongo支持地理位置数据的存储、索引、查询。相关的类都位于com.bugull.mongo.geo包中。 注意: MongoDB对于地理位置数据,默认使用的是WGS84坐标系。如果你的地理位置数据来源是其他坐标系的,请记得先进行转换。 存储、索引 MongoDB能够存储不同类型的地理位置数据,这些数据都是GeoJSON格式。 目前,bugu-mongo支持: Point LineStr

  • 本文向大家介绍如果将axios异步请求同步化处理?相关面试题,主要包含被问及如果将axios异步请求同步化处理?时的应答技巧和注意事项,需要的朋友参考一下

  • 问题内容: 我是React JS和Redux的新手,它实在太庞大了,无法继续使用。我正在尝试使用Axios发出POST请求,但无法执行。可能是容器文件中缺少某些内容。下面是代码。检查plnkr 更新: 提交后,我收到@@ redux-form / SET_SUBMIT_SUCCEEDED消息。但是,当我检查“网络”标签时,看不到对API的调用。而且,当我安慰提交的值时,我只会看到名称和全名值。它不

  • 我们知道,由于臭名昭著的中国GPS偏移问题,GPS(WSG-84)地图坐标与国家批准的中国地图使用的坐标系(GCJ-02)不完全对应。 问题是,如何确保通过百度地图API在导航器报告的坐标处放置标记。地理位置。getCurrentPosition()是否符合现实? 制造或批准在中国使用的设备的GPS芯片是否会返回与用户实际位置不匹配的坐标,以匹配GJC-02地图? 用户运行中文导航器(如Maxth