[英]Async/Await does not work with alert() - javascript
我希望首先執行帶有 await 關鍵字的兩個函數,然后應該執行 alert() 和 location.reload。
async function CompleteUpload(){
await LoadValues();
await UploaderMethod();
alert("Product Added Successfully!");
location.reload();
}
警報只是在 2 個 await 函數調用之前彈出,並且在執行這些方法之前頁面會重新加載。
async function LoadValues(){
prName = document.getElementById('NAMEbox').value;
proc = document.getElementById('PROCbox').value;
}
async function UploaderMethod(){
var uploadTask = firebase.storage().ref("Laptops/Img" + id+".png").put(files[0]);
uploadTask.on('state_changed', function(snapshot){
}, .... //firebase upload data function
如果我不將 alert() 放在最后並重新加載,則上傳 CompleteUpload() 可以完美運行。
更新**(在有人回答有關返回承諾之后)
在上傳任務結束時,我寫道:
return new Promise(function(resolve, reject) {
resolve("yeah");
}
將完整上傳更改為:
function CompleteUpload(){
LoadValues();
UploaderMethod().then(Reeeload());
}
function Reeeload(){
alert("Product Added Successfully!");
location.reload();
}
這與alert
完全無關。
您的UploaderMethod
被定義為async
因此它始終返回一個承諾,但該承諾在 uploadTask 完成之前解決(因此它會立即繼續下一個語句( alert
后跟reload
)。
你應該:
async
關鍵字(因為它不await
任何承諾)Promise
構造函數創建的Promise
state_changed
事件處理程序中解決該承諾(當一切都解決時)。請參閱如何將現有回調 API 轉換為承諾? .
LoadValues
: LoadValues
除了完全同步的 DOM 訪問之外什么LoadValues
做。 它不應該被標記為async
,你不應該await
結果。
是不是特別alert()
不適用於 async/await? 如果您將alert()
和location.reload()
行替換為console.log
以查看它是否也首先執行,該怎么辦。
可能是您的LoadValues()
和UploaderMethod()
導致了問題。
await 在頂級代碼中不起作用
所以intead function(){ } 使用這個()=>{} 它會起作用我從這個站點制作了屏幕截圖。 我遇到了同樣的麻煩( https://javascript.info/async-await )在此處輸入圖片描述
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.