【发布时间】:2018-03-17 01:16:58
【问题描述】:
我正在制作一个应用程序,由于我对 promises 不熟悉,所以我在为 promises 苦苦挣扎。这是我的代码:
let error = null;
let login = $('#inputLogin').val();
let errorCheck = new Promise(function (resolve, reject) {
if ( login === "" ) { error = "no login!"; }
if ( error !== null ) {
error = { status: false, reason: error, result: null };
reject(error)
} else {
resolve()
}
})
let authUser = new Promise(function(resolve, reject) {
$.ajax(
{
url: "src/game/Action.php",
method: "POST",
data: { action: "createUser", login: $('#inputLogin').val(), pass: $('#inputPass').val() }
}
).done(function (data) {
let response = JSON.parse(data);
if ( !response.status ) {
reject(response);
} else {
resolve()
}
})
})
errorCheck.then(function() {
console.log('no error.. go on..')
return authUser;
}).
then(function () {
console.log('everything is fine')
}).
catch(function (error) {
console.log('error: ' + error.status)
})
如您所见,有两个验证:第一个检查登录字段是否为空。如果它是空的,它会创建一个带有状态和原因变量的对象,并且 promise 被拒绝。如果没问题(没有发生错误),它开始检查异步 ajax 调用 theat 检查用户是否已经在数据库中。这将返回 JSON 字符串,该字符串被解析为类似于错误对象的对象。如果这个对象的状态是假的,它也会拒绝它自己的承诺。否则一切正常,用户已添加到数据库中。
不幸的是,这段代码没有按预期工作:
即使errorCheck 失败,它也会检查authUser,但我猜errorCheck 出错时应该调用catch 并停止执行其他任何操作。
我想要实现的是: 如果发生错误(错误返回 false) - 去捕捉。如果没有错误,就去认证用户。如果用户返回 false - 去捕捉。否则任务完成。
任何帮助都将不胜感激。
PS:我还需要提到的是 authUser 返回 false 我在控制台中收到错误:
Uncaught (in promise) {status: false, reason: "user already in db", result: null}
【问题讨论】:
-
您在检查
login变量值时使用Promise 是否有特定目的?这是一个纯粹的同步活动,因为它是编写的,不需要 Promise。
标签: javascript promise