Javascript Promise的响应未正确返回json文件输出

Javascript Promise的响应未正确返回json文件输出,javascript,json,fetch,console.log,Javascript,Json,Fetch,Console.log,因此,当运行以下代码时,console.log(ba)的响应是undefined 但是当我在Chrome V8控制台中尝试这一点时,我得到了我期望的正确输出。我不完全确定这里发生了什么 let ba; function Setqa() { ( async() => { await fetch('questions.json') .then(res => res.json())

因此,当运行以下代码时,
console.log(ba)
的响应是
undefined
但是当我在Chrome V8控制台中尝试这一点时,我得到了我期望的正确输出。我不完全确定这里发生了什么

    let ba;
    
    function Setqa() {
      ( async() => {
          await fetch('questions.json')
            .then(res => res.json())
              .then(async(data) => {
                ba = await data;
            });
      })();
    }
    
    Setqa();
    
    console.log(ba);
json文件的内容如下所示:

"questions": [{
            "questionType": "multiple",
            "question": "How is the weather",
            "answers": "",
            "questionAnswer": ""
        },
        {
            "questionType": "multiple",
            "question": "How are you today?",
            "answers": "<textarea rows='5' class='textArea'></textarea>1",
            "questionAnswer": "textPurpose1"
        }
    ]
“问题”:[{
“问题类型”:“多个”,
“问题”:“天气怎么样”,
“答覆”:“,
“问题答案”:”
},
{
“问题类型”:“多个”,
“问题”:“你今天好吗?”,
“答案”:“1”,
“问题答案”:“文本目的1”
}
]

我想这应该行得通

    let ba;
    
    function Setqa() {
      return fetch('questions.json')
            .then(res => res.json())
              .then(async(data) => {
                ba = await data;
            });
    }
    
    Setqa().then( () => console.log(ba) );
    
但更好的方法是

async function setQa(){
   const res = await fetch('questions.json');
   return res.json();
}

let ba = await setQa();

Chrome控制台的问题是,如果变量引用没有更改,它将更新该值。稍后再打开控制台。试试这个:
let c=()=>{let b={}console.log(b)setTimeout(()=>{b={hi:'gg'}},5000)};c()
首先尝试在5000ms之前打开控制台输出,然后再次运行,并在5000ms之后打开控制台输出,然后查看差异。回到你的问题上来,你的问题是你正在打印
ba
,然后它才真正解决