麻烦回归早期解决JavaScript中的承诺

时间:2017-09-29 03:30:06

标签: javascript jquery promise

我有一个函数,在函数本身内决定进一步的执行。需要使用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 ) ;
}

我收到一个未定义的解决错误。此外,早些时候,当我没有使用其他时,它甚至在遇到决心后仍继续执行。应该采取什么样的正确方法?

1 个答案:

答案 0 :(得分:3)

您的函数中未定义

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&等待使异步代码更加同步读取。