如何访问外部范围内的回调函数返回的值?

问题描述 投票:0回答:2

我在从父/外部作用域的回调函数中访问值时遇到麻烦。基本上,我想访问以下s3.getObject()函数获取的数据,并将其用于外部作用域(最后一行)。

我有以下javascript代码可从AWS提取一些数据:

const Papa = require('papaparse'); 
const AWS = require('aws-sdk')

AWS.config.update({
    //ids
})

const s3 = new AWS.S3()


/* actual parameters should go here */
const params = {
  Bucket: "test-ashish-2019", 
  Key: "dummy.csv"
};

const parseOptions = {
  header: true,
  dynamicTyping: true
}

s3.getObject(params, function(err, data) {
if (err)  console.log(err, err.stack);
//   else {console.log(data)};
else {
    const csv = data.Body.toString('utf-8'); 
    const headers = 'id,start,end,count';
    const parsed = Papa.parse(headers + '\n' + csv, parseOptions);
    var csvdata = parsed.data;
    console.log(csvdata); //this is working as expected
    }

});

console.log(csvdata); //not working as expected

我如何使最后一行有效?

javascript node.js function callback closures
2个回答
0
投票

您无法在回调范围之外访问该变量,因为回调是异步发生的(实际上,您的最后一行实际上是在由回调设置csvdata之前调用的。)>

您必须沿着承诺链传递该数据(或使用async / await)以在回调上下文之外使用它。

© www.soinside.com 2019 - 2024. All rights reserved.