Javascript变量范围外的函数

时间:2017-03-20 12:59:11

标签: javascript node.js

javascript中数组的范围是什么?

我该如何解决这种情况?

var parseXlsx = require('excel');
var arrayURLToSearch = [];
parseXlsx('foo.xlsx', function(err, data) {
  if(err) throw err;
    for(var i=1; i<2; i++){
        arrayURLToSearch[i] = data[i][0];
    }
});
console.log(arrayURLToSearch[0]); -> undefined

如何在功能外打印arrayURLToSearch

2 个答案:

答案 0 :(得分:1)

你做不到。回调发生在将来的某个时刻,您无法预测。试试这个:

var arrayURLToSearch = [];
parseXlsx('foo.xlsx', function(err, data) {
  if(err) throw err;
    for(var i=1; i<2; i++){
        arrayURLToSearch[i] = data[i][0];
    }

console.log(arrayURLToSearch[0]);
});

答案 1 :(得分:0)

您的方法是异步的,因此console.log(arrayURLToSearch[0]);行将在parseXlsx方法之前执行。

一种解决方案是使用callback函数。

function execute(callback){
   var parseXlsx = require('excel');
   var arrayURLToSearch = [];
   parseXlsx('foo.xlsx', function(err, data) {
     if(err) throw err;
     for(var i=1; i<2; i++){
         arrayURLToSearch[i] = data[i][0];
     }
     callback(arrayURLToSearch);
   });
}
execute(function(arrayURLToSearch){
     console.log(arrayURLToSearch[0]);
});