Javascript 如何从函数中恢复数组

Javascript 如何从函数中恢复数组,javascript,Javascript,我试图用console.log(mj[0])从函数中获取数组,它返回的是未定义的 var ref=“somefile.json” var mj=[]; 异步函数ss(){ 等待获取(ref)。然后((respose)=>{ 返回respose.json(); })。然后((数据)=>{ console.log(数据) var a=Object.keys(数据) mj推力(a) }) } ss() 控制台日志(mj) console.log(mj[0])运行console.log(mj[0])时

我试图用console.log(mj[0])从函数中获取数组,它返回的是未定义的

var ref=“somefile.json”
var mj=[];
异步函数ss(){
等待获取(ref)。然后((respose)=>{
返回respose.json();
})。然后((数据)=>{
console.log(数据)
var a=Object.keys(数据)
mj推力(a)
})
}
ss()
控制台日志(mj)

console.log(mj[0])
运行
console.log(mj[0])
时,
mj
仍然为空。 原因是您的函数
ss
是异步执行的

您只需等待方法调用:

var ref = "somefile.json"
var mj = [];

async function ss() {
  await fetch(ref).then((respose) => {
    return respose.json();
  }).then((data) => {
    console.log(data)
    var a = Object.keys(data)
    mj.push(a)
  })
}
// You also have to await here.
await ss()

console.log(mj)
console.log(mj[0])
如果您使用承诺链接,这将起作用:

async function ss() {
  return fetch(ref).then((respose) => {
    return respose.json();
  }).then((data) => {
    console.log(data)
    var a = Object.keys(data)
    mj.push(a)
  })
}

ss().then(() => console.log(mj[0]));

我为你做了一个堆栈片段。请在此处添加更多关于您打算做什么以及实际问题的详细信息和说明。另外,我们将在这里得到一个空数组,因为周围没有文件名为
somefile.json
,所以基本上您的请求将失败,
然后
关于成功的声明将永远不会运行。我的计算机中有一个文件,它有一个数组。我只是用“somefile.json”来证实我的想法。除非你为当前问题创建一个新的解决方案,否则我们无法在这里为你提供这些信息。因此,您需要将该文件上载到某个位置,并将此片段引用到实时上载的文件。仅供参考,我的开发工具正在使用console.log(mj)为变量提供包含数组的变量,但它未能返回console.log(mj[0]),我无法告诉您这里的实际问题是什么。但是这应该可以正常工作,
mj[0]
应该包含一个对象键数组。除非承诺不能实现
console.log()
moment。谢谢你的帮助,尽管我想从这个函数中得到mj[0]的值。。是否有任何方法可以将数组mj[0]存储在全局变量中如果您希望它是全局的,您仍然可以将其存储在窗口中:window.mj=[]。然而,在我看来,这是一个不同的问题。您的代码示例中的问题是异步性。我想我现在理解了您的注释-如果您想继续使用wait,那么只缺少一个wait。请参阅我编辑的答案。干杯。它抛出了一个愚蠢的错误wait只允许在异步函数中使用,如果我尝试将wait ss()放在另一个异步函数mj[0]中,仍然给出未定义的