我想使用 await 將回應保存到變數。我需要將該回應存盤在一個變數中,并在下一個代碼流中使用它。我不想只在函式大括號記憶體儲和使用變數。在下面的代碼中,只寫了一個console.log,但存在很多事件。我不想使用 fetch 然后。我想使用 async/await 來解決它,但我所做的一切都是錯誤的。我做錯了什么?
試試 1
Run => Uncaught SyntaxError: await 僅在異步函式和模塊的頂層主體中有效
var resp = await fetch(`https://www.yahoo.com/manifest_desktop_us.json`);
var jobj = await resp.json();
var display = jobj.display;
console.log(display); //I need display value
試試 2
運行 => 未定義
async function abc(url) {
var resp = await fetch(url);
var jobj = await resp.json();
return jobj;
}
var url = 'https://www.yahoo.com/manifest_desktop_us.json';
var jobj = abc(url);
//var jobj = async() => await abc(url); //undefined
var display = jobj.display;
console.log(display); //I need display value
uj5u.com熱心網友回復:
您需要在函式中移動與異步操作相關的整個async邏輯。
您可以為此使用匿名異步函式:
(async () => {
var resp = await fetch(`https://www.yahoo.com/manifest_desktop_us.json`);
var jobj = await resp.json();
var display = jobj.display;
console.log(display);
})();
或者,由于異步函式回傳 a您也可以在呼叫中Promise獲取值:then
async function abc(url) {
var resp = await fetch(url);
var jobj = await resp.json();
return jobj;
}
var url = 'https://www.yahoo.com/manifest_desktop_us.json';
var jobj = abc(url).then((value) => console.log(value));
uj5u.com熱心網友回復:
你的第一次嘗試非常接近讓它作業,錯誤Uncaught SyntaxError: await is only valid in async functions and the top level bodies of modules意味著等待只能在異步函式中使用,所以你需要包裝它
(async function(){
var resp = await fetch(`https://cors-
anywhere.herokuapp.com/https://www.yahoo.com/manifest_desktop_us.json`);
var jobj = await resp.json();
var display = jobj.display;
console.log(display); // logs "standalone" from API
})();
另外,您還需要繞過cors,為了演示,我添加了cors URL,但是在您的生產應用程式中,您必須在全域 HTTP 請求實體中處理它或擁有自己的后端 URL。
uj5u.com熱心網友回復:
您可以使用then.
const [data, setData] = useState({})
const getApi = async () => {
const resp = await fetch(`https://www.yahoo.com/manifest_desktop_us.json`)
return resp
}
getApi().then((resp) => setData(resp.json))
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/445694.html
標籤:javascript 异步 获取 API
