在JavaScript的承诺中返回早期解析时遇到问题
我有一个函数,其中进一步的执行由函数本身决定。需要使用承诺,因为它是一个异步函数。问题是,即使在解决问题后,它仍会继续执行 我的代码:在JavaScript的承诺中返回早期解析时遇到问题,javascript,jquery,promise,Javascript,Jquery,Promise,我有一个函数,其中进一步的执行由函数本身决定。需要使用承诺,因为它是一个异步函数。问题是,即使在解决问题后,它仍会继续执行 我的代码: function initApp () { token = getToken () ; if ( token == null ) { resolve ('Not Found') ; } else { // ... async process if ( tokenStatus == "true
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,它仍然继续执行。正确的方法是什么?
resolve
和reject
在您的函数中没有定义,因为它们超出了范围。您应该从init函数返回一个承诺,如下所示:
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)
})
你也没有正确地使用承诺。当您尝试做的事情成功时,您应该
解决
,当您尝试做的事情失败时,您应该拒绝
。我的朋友,你的一个收获是阅读承诺以及JavaScript的基本部分(例如,你稍后将用一个变量覆盖init
函数)。此外,您应该研究async&Wait,它使异步代码的读取更加同步。您确实意识到let init=
正在破坏function init
对吗?也许有帮助-我添加了一些额外的行,这样您就可以获得更多的报酬-尽管这可能会有所帮助,但是我发现//异步进程
之后是令牌状态的同步测试
没有像那个人那样的问题;-)我在拉你的链条:p但是看到更新的提琴-我怀疑你仍然会有提到的问题顺便说一句,在实际功能中,是initApp查看async&Wait使异步代码读取更同步
-问题是。。。承诺可以在旧的浏览器(如Internet Exploder)中使用-使用async/await需要传输。。。另一个没有那么多好处的复杂情况(在本场景中)@JaromandaX我理解您的担忧,但我将把这个决定留给提出问题的用户。我只是想让他走上正轨。谢谢兄弟的帮助。不过,请您详细说明上面评论中报告的问题。@SamagraSinghTomar并非所有web浏览器及其版本都支持最新的JavaScript语言功能。要解决这个问题,您可以对某些功能进行多填充,如Promise
(如果它不存在),但并非所有功能都可以进行多填充。如果是这种情况,则需要使用Babel之类的工具将“现代”源代码“传输”到“旧”源代码,以使其正常工作。使用async/await
特性的源代码被转换为常规回调样式的异步。看到和