NodeJS 正在尝试从Browserify包中提取提取的数据

pkbketx9  于 2023-01-12  发布在  Node.js
关注(0)|答案(1)|浏览(101)

我是Browserify/Node.js的新手,我一直在尝试使用npm拉取数据。我在一个js文件main.js中拉取数据的代码是:

const { getChart } = require('billboard-top-100');
var artistArray = [];

getChart('artist-100', '', (err, chart) => {
    if (err) console.log(err);
    for (let i = 0; i < 100; i++) {
    artistArray.push(chart.songs[i].artist)
    }
    console.log(artistArray);
    return artistArray;
});

然后,我将这个文件与Browserify捆绑在一起,以便能够在单独的js文件bundle.js中的HTML代码中访问它。
虽然我可以使用console.log来记录artistArray变量,并执行终端命令〉node main.js,这会成功显示artistArray,但我无法在主html文件中获取该变量。
我什么都试过了。如果这个问题很蠢,我很抱歉,我是个初学者。

lp0sw83n

lp0sw83n1#

const { getChart } = require('billboard-top-100');
var artistArray = [];

getChart('artist-100', '', (err, chart) => {
    if (err) console.log(err);
    for (let i = 0; i < 100; i++) {
    artistArray.push(chart.songs[i].artist)
    }
    console.log(artistArray);
    return artistArray;
});

console.log(artistArray) // <- this will print []

如果你在回调函数(err, chart) => {...}之外调用artistArray,那么你会得到和init相同的值,因为那时你还没有来自getChart的数据,所以你只能在回调函数内部使用它。
总结如下:

  • 在回调函数中返回artistArray在这里是无用的。
  • 您只能使用该回调函数内部的数据
const { getChart } = require('billboard-top-100');
var artistArray = [];

getChart('artist-100', '', (err, chart) => {
    if (err) console.log(err);
    for (let i = 0; i < 100; i++) {
    artistArray.push(chart.songs[i].artist)
    }
    // Using the artistArray direct here.
});
  • 或者它有一个技巧,你可以使用setTimeoutdelay,你认为这是足够安全的getChart做的数据。
...
getChart(..., '' , (err, chart)=> {...})
setTimeout(() => {
  console.log(artistArray) // <- data after updated
}, 3000) // <- waiting 3 second

对我来说,为了处理这个,我通常会建立一个函数,它的输入是一个数组,我们要处理它,把所有的逻辑都放在那里,然后把它放到回调函数中。

getChart('artist-100', '', (err, chart) => {
  if (err) console.log(err);
       for (let i = 0; i < 100; i++) {
      artistArray.push(chart.songs[i].artist)
  }
  handleList(artistArray)
})

function handleList(arr) {
  // your code logic with artistArray here
}

相关问题