所以現在我在使用 async/await 函式時遇到了一些問題,我的目標是在用戶單擊按鈕時更新變數。完成此操作后,我在控制臺記錄更新的變數。例如,在我的代碼中,我創建了一個名為 result 的全域變數,然后我有一個帶有事件偵聽器的函式,可以在單擊按鈕時更改變數的值,但是當我控制臺記錄變數時,我得到一個未定義的變數而不是值我把它設定為。這是代碼:JS檔案
let onlyBtn = document.getElementById("onlyButton");
let result;
async function realMain(){
await step();
console.log(result);
}
async function step(){
return new Promise((resolve) =>{
onlyBtn.addEventListener("click", function(){
result = "nice";
});
resolve();
});
}
realMain();
HTML 檔案:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="style.css">
<title>Document</title>
</head>
<body>
<div>
<button id="onlyButton">Run</button>
</div>
<script src="app.js">
</script>
</body>
</html>
我怎樣才能做到這一點,所以我必須等待更新完成的功能,然后我控制臺記錄更新的變數?
uj5u.com熱心網友回復:
您的代碼沒有通過單擊觸發事件,您應該將引數結果傳遞給決議
let onlyBtn = document.getElementById("onlyButton");
let result;
async function realMain() {
await step().then((res) => {
console.log(res);
});
}
async function step() {
return new Promise((resolve) => {
onlyBtn.addEventListener("click", function () {
result = "nice";
resolve(result);
});
});
}
realMain();
<div>
<button id="onlyButton">Run</button>
</div>
uj5u.com熱心網友回復:
當你console.log在realMain運作時。result變數仍未設定。該值在onlyBtn接收click事件時設定。所以你只需要在事件回呼中列印結果。
并且假設您的代碼段是您的完整代碼,step異步函式的邏輯是錯誤的。它沒有做任何與異步相關的事情,只是設定了一個事件監聽器。所以它根本不應該是異步的。
uj5u.com熱心網友回復:
你只需要將你的 resolve() 呼叫移到你的 eventListener 中,看這里
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/471230.html
標籤:javascript 异步 异步等待 点击
