Javascript获取API状态返回未定义

Javascript获取API状态返回未定义,javascript,Javascript,由于不赞成XMLHttpRequest,我一直在尝试重写一个javascript函数,该函数通过使用Fetch检查url是否存在。我的控制台日志生成正确的值,但我的return语句始终未定义。我做错了什么 函数urlExists(url){ var请求=新请求(url); 获取(请求)。然后(函数(响应){ console.log(响应状态); 返回response.status!=404; }); } 编辑:基于控制台中的此错误消息,我突然发现了一个bug。主线程上的同步XMLHttpReq

由于不赞成XMLHttpRequest,我一直在尝试重写一个javascript函数,该函数通过使用Fetch检查url是否存在。我的控制台日志生成正确的值,但我的return语句始终未定义。我做错了什么

函数urlExists(url){
var请求=新请求(url);
获取(请求)。然后(函数(响应){
console.log(响应状态);
返回response.status!=404;
});
}

编辑:基于控制台中的此错误消息,我突然发现了一个bug。主线程上的同步XMLHttpRequest已被弃用,因为它会对最终用户的体验造成有害影响。我的bug实际上在代码的其他地方。抱歉搞混了

将其转换为

 function urlExists(url) {
        return new Promise((resolve,reject)=>{
          var request = new Request(url);
          fetch(request).then(function(response) {
             resolve(response.status != 404);
          });
        });
    }
使用它

urlExists("https://www.google.com").then(result=>{
  console.log(result);
});

问题是您试图通过编写异步代码来执行同步操作。代码中的两个返回语句都与其各自的作用域相关。您需要有一个回调,以从fetch返回响应

function urlExists(url, callback) {
    var request = new Request(url);
    fetch(request).then(function(response) {
        console.log(response.status);
        callback(response.status != 404);
    });
}

/* Usage */
urlExists('http://example.com', (isExist) => {
    if(isExist) {
        console.log('URL found');
    }
    console.log('URL not found');
})

您提供的代码不处理错误部分。因此,这可能是它不起作用的原因

函数urlExists(url){
var请求=新请求(url);
返回fetch(请求)。然后返回函数(响应){
返回(response.status!=404);
},函数(错误){
返回false;
});
}
URLESSISTS(“https://jsonplaceholder.typicode.com/todos/1)然后(result=>{console.log(result);});

URLESSISTS(“https://google.com)然后(result=>{console.log(result);})
您的函数返回一个承诺,因此请确保您正在使用
等待
。然后(…)
在外部代码中正确访问响应

哪个返回语句?我找不到您的代码有问题……您的代码似乎没有问题,为了清晰起见,您可以创建JSFIDLE吗?“不推荐XMLHttpRequest”-XMLHttpRequest没有被反对。“我的返回语句始终未定义”-哪个返回语句?您如何确定它是未定义的?(您有两个,它们都不能生成未定义的结果)重新编辑:您仍然没有显示如何确定响应是什么,但是通过从
urlExists
中删除
return
语句,您可以保证
urlExists
现在将始终返回
未定义的
(而不是它以前从
fetch
得到的承诺)。你是对的,所以保持函数的原样,但你必须使用urlExists(“>{console.log(result);}调用它);对不起,我不是想说对。我只是想知道。这是我的错。这是一样的,但你只需使用
调用函数,然后,
由@Archie提供的代码在工作文件中没有承诺。为什么我们需要承诺?这就是问题所在。我认为这不是问题所在。函数返回的布尔值基于正在使用的staus代码404.使用承诺消除了对回调函数的需要。这不好,因为它绕过了使用承诺的理由。这不可能是问题所在。他们说他们得到了
未定义的
。如果他们没有
等待
则他们会得到承诺对象。