【发布时间】:2020-07-14 19:29:56
【问题描述】:
我正在尝试设置一个仅在 ajax 调用后返回结果的承诺
但是在我的代码中,结果在 ajax 完成之前返回 null,从控制台日志中我还可以看到它是在 checkuser 函数完成之前返回的。
我怎样才能做到这一点,我是否必须进行超时循环等待结果将值更改为 0 或 1 并设置超时限制?
function checkUser() {
return new Promise((resolve, reject) => {
$.ajax({
type: "POST",
url: 'checkUserAvail.php',
data: {value: value},
success: function (data) {
resolve(data);
},
error: function (error)
{
reject(error);
}
})
})
}
checkUser()
.then((data) => {
console.log(data);
if (data == 1)
{
outcome= 1;
}
if (data == 0)
{
outcome= 0;
}
})
.catch((error) => {
alert("An error ocurred");
})
console.log(outcome);
return outcome;
【问题讨论】:
-
你不能返回一个依赖异步调用的值,除非你也使函数异步,
awaitPromise,然后返回它的结果。你永远不能再回到同步代码,因为任何涉及的同步函数只能返回一个 Promise,而不是实际结果。这是我为另一个问题编写的代码示例:jsfiddle.net/khrismuc/ewbtc2Lr -
感谢@ChrisG。生病改变我的代码
-
@ChrisG Internet explorer 似乎不支持异步功能developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
-
真;在这种情况下,你需要坚持 Promises。不要返回
outcome,而是让then()回调运行需要outcome值的代码。
标签: javascript ajax promise