【发布时间】:2021-10-21 02:24:17
【问题描述】:
对不起,如果这非常简单,我无法理解它。我认为,我见过类似的问题,但没有什么能触及我问题的核心。我有一个简单的异步函数:
async function isOpen() {
var open;
var data = $.ajax({
//Working code here
});
data.done(function(dat) {
var obj = JSON.parse(dat);
var msg = "";
for (var i = 0; i < obj.length; i++) {
let closingDate = Date.parse(obj[i].close);
let openingDate = Date.parse(obj[i].open);
if (closingDate > Date.now() && openingDate < Date.now()) {
open = true;
} else {
open = false;
}
}
});
return open;
}
我知道这段代码都可以正常工作-使用console.log我已经看到open总是成功地分配给true或false。所以我从另一个异步函数调用这个异步函数:
async function testFunction(){
const open1 = await isOpen();
//More code here...
}
但open1(在testFunction 中)始终未定义——即使我使用await。
有什么想法吗?
【问题讨论】:
-
如果您在返回之前直接对其进行控制台登录,是否打开也是 true 或 false?如果您设置 var open = null; 是否仍然未定义?一开始?
-
你
return open;在 ajax 运行之前 -
另外,for循环会覆盖
open的结果,一旦你给open赋值,你就可以打破循环。 -
使用
const dat = await data后跟您的代码,而不是使用data.done()回调。 (假设您使用 jQuery 3)。
标签: javascript jquery ajax asynchronous async-await