访问回调内的变量

时间:2016-08-09 12:30:29

标签: javascript reactjs axios

我正在使用axios进行反应并拨打电话:

   import axios from 'axios';

    export default {
      getData : function(callback){

        var instance = axios.create({
          baseURL: '//abc/json',
          withCredentials: false
        });

        instance.get('')
            .then((response) => {              
                  callback(response.data.abc);                
              }, (error) => {
                  callback(error)
              });
         }
    }

在另一个文件中,我正在执行以下操作:

import file from './file';


//class definition...

    componentDidMount(){

        var obj = {}
        var res = file.getData(function(abc){
            obj['abc'] = abc;
        });

        console.log('obj-abc ', obj.abc); //returns undefined
      }

如上所示,我一直未定义。我基本上希望变量在全球范围内可用。我查看了有关本网站回调的其他建议,但没有一个可以帮助我。

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:1)

简单地说

componentDidMount(){

var obj = {}
var res = file.getData(function(abc){
    obj['abc'] = abc;
    console.log('obj-abc ', obj.abc);
});

由于getData方法是异步的,因此不一定会在javascript代码中按顺序执行。这个变量已经是全局的,但是如果你想确保你可以在它之后立即使用它,那么在继续执行代码之前先设置一些完成条件。

答案 1 :(得分:-1)

这里要清楚JS。 看代码

setTimeout(met1, 0);
console.log("11");    
setTimeout(met2, 0);
console.log("22");

Out put将是这样的

11
22
met1 output
met2 output

所以请记住,异步代码将在未来执行,而不是在此刻执行。将为您节省大量的调试时间。希望这会有所帮助。