【问题标题】:How to return a value from another scope如何从另一个范围返回值
【发布时间】:2019-11-12 19:02:47
【问题描述】:

我在 javascript 中的函数内部有一个函数。我在最里面的函数中得到了我的值,但我需要在最外面的函数中返回它。像这样:

import convertPrice from "./convertPrice";
import getCountryInfoByLanguage from "./getCountryInfoByLanguage";
import axios from "axios";
export default (language, price) => {
  let countryCode, currency, formattedPrice;

  navigator.geolocation.getCurrentPosition(position => {
    axios
      .get(
        `http://api.geonames.org/countryCodeJSON?lat=${
          position.coords.latitude
        }&lng=${position.coords.longitude}&username=...`
      )
      .then(response => {
        countryCode = getCountryInfoByLanguage(
          response.data.languages.split(",")[0]
        ).countryCode;
        currency = getCountryInfoByLanguage(
          response.data.languages.split(",")[0]
        ).currency;
        const convertedPrice =
          Math.round(convertPrice(price, currency) * 10) / 10;
        formattedPrice = convertedPrice.toLocaleString(countryCode, {
          style: "currency",
          currency: currency
        });
        console.log(formattedPrice);
        return formattedPrice; //This is where the value gets properly returned
      });

  });
    //this is where I want the value to be returned
};

【问题讨论】:

标签: javascript reactjs ecmascript-6 axios


【解决方案1】:

由于您正在处理 Promise,因此您始终可以返回它们并在最后调用最终的 then

import convertPrice from "./convertPrice";
import getCountryInfoByLanguage from "./getCountryInfoByLanguage";
import axios from "axios";
export default (language, price) => {
  let countryCode, currency, formattedPrice;

  navigator.geolocation.getCurrentPosition(position => {
    return axios
      .get(
        `http://api.geonames.org/countryCodeJSON?lat=${
          position.coords.latitude
        }&lng=${position.coords.longitude}&username=filipk268`
      )
      .then(response => {
        countryCode = getCountryInfoByLanguage(
          response.data.languages.split(",")[0]
        ).countryCode;
        currency = getCountryInfoByLanguage(
          response.data.languages.split(",")[0]
        ).currency;
        const convertedPrice =
          Math.round(convertPrice(price, currency) * 10) / 10;
        formattedPrice = convertedPrice.toLocaleString(countryCode, {
          style: "currency",
          currency: currency
        });
        console.log(formattedPrice);
        return formattedPrice; //This is where the value gets properly returned
      });

  }).then((data) => {
      console.log(data);
  })
};

请注意,我正在返回 axios 调用,它返回一个承诺,您甚至可以返回 navigator.geolocation.getCurrentPosition,它可以作为当前范围之外的承诺访问。

【讨论】:

  • 不,这不起作用。我得到 navigator.geolocation.getcurrentposition is undefined 错误。
  • 你能检查一下navigator.geolocation是否被定义了吗?
  • 我在浏览器控制台中检查了它,它是。当我删除最后一个 .then() 时错误消失
  • 试着理解我做了什么而不是复制粘贴我的代码。
  • 我为什么要尝试理解不起作用的代码?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-04-13
  • 2020-11-07
  • 2020-11-15
  • 2012-08-22
  • 2021-01-16
  • 1970-01-01
  • 2021-12-11
相关资源
最近更新 更多