簡體   English   中英

異步/等待不適用於 alert() - javascript

[英]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 轉換為承諾? .


LoadValuesLoadValues除了完全同步的 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM