gpt4 book ai didi

javascript - 我使用 .done() 不正确,没有按预期返回值

转载 作者:行者123 更新时间:2023-11-29 10:41:54 24 4
gpt4 key购买 nike

我正在尝试使用 jQuery 的 AJAX deferreds 返回一个可以解析和使用的 JSON 字符串,但我已经把自己写进了一个 Angular 落,可能搞砸了逻辑。我希望在 .done() 中返回 AJAX 调用的结果。回调他们是。我认为一旦完成,我就可以返回结果以用于函数的其余部分。我知道我错过了一些非常明显和简单的东西,我只是无法确定它是什么。

这是函数的初始编码,仍然处于测试模式。 JSON 在 .done() 中正确返回函数,但我不能在函数之外分配它以供使用。

checkUserRoles = function(){
var userRole, foo, roles, i$, len$, i;
userRole = roleChecker();
foo = userRole.done(function(data){
var bar;
bar = foo.responseText; // correctly returns the JSON data
console.log(bar);
return bar; // is undefined, this is the problem
});
if (userRole !== false) {
userRole = jsonDecode(userRole);
} else {
userRole = "";
}
roles = userRole.split(',');
$("if-user-role").hide();
for (i$ = 0, len$ = roles.length; i$ < len$; ++i$) {
i = roles[i$];
$("if-user-role[data-role~=" + i + "]").show();
}
return true;
};
this.roleChecker = function(){
var retVal, allCookies, i$, len$, thecookie, hashedCookie, theHash, userHash, post;
retVal = "";
allCookies = document.cookie.split(';');
for (i$ = 0, len$ = allCookies.length; i$ < len$; ++i$) {
thecookie = allCookies[i$];
if (thecookie.indexOf('userHash') >= 0) {
hashedCookie = thecookie;
theHash = hashedCookie.split('=');
userHash = theHash[1];
}
}
post = $.ajax({
url: '/services/check_hash.php',
data: {
hash: userHash
},
type: "POST"
});
return post;
};

您在这里看到的代码是我们广泛使用的 LiveScript 的编译输出。我认为 LiveScript 不会对最终结果产生影响,我只是需要做很多工作才能获得我期望的正确 JavaScript/jQuery 输出。

注意:因为这或多或少是代码 foo 的第一遍不会作为 userRole 传递给后续的 if 语句在尝试使函数更具动态性之前,最初是为初始测试而硬编码的。

如何返回 foo.responseTextbar用于后续程序?我需要把程序放在if开头吗?有条件的 .done()功能?

最佳答案

您正在寻找 .then 而不是 .done

.done 所做的是执行一个操作并返回相同的 promise 。另一方面,then 返回一个新的 promise ,该 promise 由提供给它的回调的返回值解决。 (假设 $.ajax 正确解析)。

您当然需要将您随后所做的一切都放在链中:

userRole.then(function(data){
var bar;
bar = foo.responseText; // correctly returns the JSON data
console.log(bar);
return bar;
}).then(function(role){;
if (role != false) {
role = jsonDecode(userRole);
} else {
userRole = "";
}
//...
return true;
});

您还应该返回 promise 稍后 Hook 。

关于javascript - 我使用 .done() 不正确,没有按预期返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27450782/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com