Javascript 反应功能不重新分配(let)或推入阵列

Javascript 反应功能不重新分配(let)或推入阵列,javascript,reactjs,function,Javascript,Reactjs,Function,大家好,Js程序员,我有一个关于函数的独家新闻或变量的问题 我这里有这个代码是为了得到gecoder的职位 getPosition = pos => { let address; Geocoder.reverseGeocode(pos.latitude, pos.longitude, (err, geoData) => { if (!err) { const data = (geoData.results[0].formatte

大家好,Js程序员,我有一个关于函数的独家新闻或变量的问题

我这里有这个代码是为了得到gecoder的职位

getPosition = pos => {
    let address;
    Geocoder.reverseGeocode(pos.latitude, pos.longitude, (err, geoData) => {
        if (!err) {
            const data = (geoData.results[0].formatted_address);
            address = data;
        }
    }, apiKey);
    console.log(address);// undefined
}
我试着使用一个数组并将结果放入其中

const address = [];
Geocoder.reverseGeocode(pos.latitude, pos.longitude, (err, geoData) => {
    if (!err) {
        const data = (geoData.results[0].formatted_address);
        address.push(data);
    }
}, apiKey);
console.log(address[0]);
有没有办法从字符串数据中获取值?
感谢您在回调定义/修改变量之前记录变量,从而产生意外结果

这应该起作用:

getPosition = pos => {
  let address;
  Geocoder.reverseGeocode(pos.latitude, pos.longitude, (err, geoData) => {
    if (!err) {
      const data = (geoData.results[0].formatted_address);
      address = data;
    }

    // log INSIDE the callback!
    console.log(address);

  }, apiKey);
}
这也是:

// callback is not executed yet, don't log!

const address = [];
Geocoder.reverseGeocode(pos.latitude, pos.longitude, (err, geoData) => {
  if (!err) {
    const data = (geoData.results[0].formatted_address);
    address.push(data);
  }

  // logs INSIDE the callback!
  console.log(address[0]);

}, apiKey);

// callback is not executed yet, don't log!

如果您在react类组件中使用
getPosition
方法,那么您可以创建一个state
address
,并在其中存储数据,如下所示

import React from 'react';

export default class GetPosition extends React.Component {

    state = {
        address: []
    }

    getPosition = pos => {
        Geocoder.reverseGeocode(pos.latitude, pos.longitude, (err, geoData) => {
            if (!err) {
                const data = (geoData.results[0].formatted_address);
                this.setState({address: [...this.state.address, data]})
            }
        }, apiKey);
    }

    render() {
        const address = this.state
        console.log(address)

        return (
            <div>{address[0]}</div>
        );
    }
}
const address = [];

getPosition = pos => {
    Geocoder.reverseGeocode(pos.latitude, pos.longitude, (err, geoData) => {
        if (!err) {
            const data = (geoData.results[0].formatted_address);
            address.push(data);
       }
    }, apiKey);
}

console.log(address[0]);

我希望这会对您有所帮助,您应该了解这是问得最多的反应问题我不想使用状态,因为我需要列表中的返回,我认为这是js范围问题,因为我无法重写变量。我可以推入数组,但我不能将其用作返回,我认为这是一个同步问题和回调问题。这不是一个问题,只是JavaScript的工作方式。。。我强烈建议您遵循Niraj和我向您推荐的常见JS模式。在回调内部,一切正常,我需要回调外部的值。您不能,回调基本上就是这样工作的。。。JS是异步的,这是用这种语言必须处理的事情