簡體   English   中英

在 JavaScript 中的承諾中返回早期解決的問題

[英]Trouble returning early resolve in promises in JavaScript

我有一個函數,其中在函數本身內決定了進一步的執行。 需要使用 promises,因為它是一個異步函數。 問題是它即使在解決后仍繼續執行。

我的代碼:

function initApp () {
    token = getToken () ;
    if ( token == null ) {
        resolve ('Not Found') ;
    } else {
        // ... async process
        if ( tokenStatus == "true" ) {
            resolve ('Welcome') ;
        } else {
            resolve ('Invalid') ;
        }
    }
}

let init = new Promise ( ( resolve , reject ) => { 
    initApp ();
});

init.then((successMessage) => {
    alert ( successMessage ) ;
}

我收到未定義的解析錯誤。 此外,早些時候當我沒有使用 else 時,即使遇到了 resolve,它也會繼續執行。 這樣做的正確方法應該是什么?

resolvereject在您的函數中未定義,因為它們超出了范圍。 你應該從你的 init 函數中返回一個 Promise,像這樣:

function init () {
  return new Promise((resolve, reject) => {
    let token = getToken()
    if (!token) {
      reject('not found')
    } else {
      doSomethingAsync((tokenStatus) => {
        if (!tokenStatus) return reject('Invalid')
        resolve('Welcome')
      })
    }
  })
}

init().then((successMsg) => {
  alert(successMsg)
}).catch((errMsg) => {
  alert(errMsg)
})

您也沒有正確使用 Promise。 當你嘗試做的事情成功時你應該resolve當你嘗試做的事情失敗時你應該reject 我的朋友給你的一個外賣是閱讀 Promises 以及 JavaScript 的基本部分(例如,你稍后會用一個變量覆蓋init函數)。 此外,您應該研究 async 和 await,它使異步代碼的讀取更加同步。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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