为何JS中用fetch的async检查文件函数返回对象而非布尔值?
为什么checkFile函数没有返回true/false而是返回object?
核心原因是:所有async函数的返回值都会被自动包装成Promise对象——哪怕你在函数里return的是布尔值true/false,JS也会把它包裹成一个处于resolved状态的Promise实例。所以你直接执行let tf = checkFile("index.html");时,tf拿到的是Promise对象,而非最终的布尔值,typeof检测自然会返回object。
要获取真正的true/false结果,需要处理这个Promise,有两种常用方式:
方式一:用await调用(需在async函数内)
async function runCheck() { let tf = await checkFile("index.html"); console.log("typeof(tf) = " + typeof(tf)); // 输出 "typeof(tf) = boolean" console.log(tf); // 输出 true 或 false } runCheck();
方式二:用.then()链式处理
checkFile("index.html").then(tf => { console.log("typeof(tf) = " + typeof(tf)); // 输出 "typeof(tf) = boolean" console.log(tf); // 输出 true 或 false });
额外说明:你的checkFile函数逻辑中,response.ok仅判断状态码在200-299区间,若服务器对不存在的文件返回404会进入catch返回false,这部分符合预期,但如果遇到403(权限受限)等其他错误状态,也会返回false,可能导致误判,这点可以根据实际场景调整判断逻辑。
内容的提问来源于stack exchange,提问作者kirklandit
相关产品推荐
相关产品推荐

