Javascript获取API状态返回未定义
由于不赞成XMLHttpRequest,我一直在尝试重写一个javascript函数,该函数通过使用Fetch检查url是否存在。我的控制台日志生成正确的值,但我的return语句始终未定义。我做错了什么Javascript获取API状态返回未定义,javascript,Javascript,由于不赞成XMLHttpRequest,我一直在尝试重写一个javascript函数,该函数通过使用Fetch检查url是否存在。我的控制台日志生成正确的值,但我的return语句始终未定义。我做错了什么 函数urlExists(url){ var请求=新请求(url); 获取(请求)。然后(函数(响应){ console.log(响应状态); 返回response.status!=404; }); } 编辑:基于控制台中的此错误消息,我突然发现了一个bug。主线程上的同步XMLHttpReq
函数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.使用承诺消除了对回调函数的需要。这不好,因为它绕过了使用承诺的理由。这不可能是问题所在。他们说他们得到了未定义的。如果他们没有等待或则他们会得到承诺对象。