从外部脚本中的函数捕获错误
Catch error from function within external script
我正在使用Soundcloud API,但这个问题是关于捕获错误的。
我尝试加载一个轨道,并且,由于特定于该轨道的一些设置或限制,获得403 (Forbidden)
响应。这个错误是在我的<head>
加载的soundcloud脚本中抛出的:
<script src="https://connect.soundcloud.com/sdk/sdk-3.1.2.js"></script>
SC.initialize({
client_id: 'xxxx',
});
...
SC.resolve(`https://soundcloud.com/${trackUrl}`).then((response) => {
this.track.setAttribute('src', `${response.stream_url}?client_id=xxxx`);
});
trackURL是一个有效的URL -它是轨道的'可读' URL,它是解析到正确的轨道ID,我可以看到下面的GET请求错误:
在控制台中:
api.js:26 GET https://api.soundcloud.com/tracks/276705791.json?client_id=20f6b95488a0ca8f2254e250e6b0b229 403 (Forbidden)
inspecting api.js:
const sendRequest = (method, url, data, progress) => {
let xhr;
const requestPromise = new Promise((resolve) => {
const isFormData = global.FormData && (data instanceof FormData);
xhr = new XMLHttpRequest();
if (xhr.upload) {
xhr.upload.addEventListener('progress', progress);
}
xhr.open(method, url, true);
if (!isFormData) {
xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
}
xhr.onreadystatechange = () => {
if (xhr.readyState === 4) {
resolve({responseText: xhr.responseText, request: xhr});
}
};
xhr.send(data); // <-- LINE 26
});
requestPromise.request = xhr;
return requestPromise;
};
因为我是从外部加载这个脚本的,所以我不能对它大惊小怪。
是否有任何方法来观察错误在我自己的javascript,所以我可以准备一个回退?
约瑟夫下面的回答是我需要的-寻找resolve
承诺中的错误。Soundcloud对回复信息没有太大帮助,但我现在可以编写一个备用程序。更新代码:
SC.resolve('https://soundcloud.com/jacquesgreene/you-cant-deny').then((response) => {
this.track.setAttribute('src', `${response.stream_url}?client_id=20f6b95488a0ca8f2254e250e6b0b229`);
this.element.addClass('ready');
}, (error) => {
myFallback();
});
最简单的答案是查阅文档。
现在这是XHR,它是异步的。你不能用你的常规try-catch
"catch"。
但是,xhr操作只检查readyState 4。意味着无论HTTP状态如何(甚至是403),xhr都已完成,并且只解析带有数据(responseText
)和xhr对象本身(xhr
)的承诺。现在的问题是,如果解决的值返回到您的SC.resolve
调用。
从这里开始,这都是一个大胆的猜测(除非您再次查阅文档)。你可以检查response
在你的回调中是什么,或者尝试在你的调用中添加一个拒绝回调,希望API将其正确映射为失败。
SC.resolve(`https://soundcloud.com/${trackUrl}`).then((response) => {
// What is `response` and what does it contain?
}, function(error){
// Does this execute? If so, what is `arguments`.
});
- XMLHttpRequest:需要使用ajax中的成功和错误函数
- Javascript 错误:函数预期
- 未捕获的引用错误:函数未使用 onchange 定义
- 如何让jQueryajax执行错误函数
- 未定义未捕获的引用错误函数
- $.ajax在跨域url上不返回错误函数
- jQuery.ajax+php5.3-始终执行错误函数
- javascript未捕获类型错误函数ajax
- 在 Promise 调用的错误函数回调后附加对象的用法是什么
- Ajax 请求在 HandleUnauthorizedRequest 之前命中错误函数
- 引用错误:“函数”未定义
- 黑莓 10 级联 ajax 调用从 javascript 总是执行错误函数
- Ajax 调用弹簧控制器回调错误函数
- 未定义未捕获的引用错误函数
- 主干.js - n捕获异常:语法错误:函数构造函数:无法编译函数
- 引用错误:函数未定义错误
- “未捕获的引用错误:(函数)未定义”与焦点事件
- JavaScript 未捕获的引用错误函数未定义 单击时
- 引用错误:函数未定义
- 类型错误: [函数名称] 不是函数,在猫鼬和节点.js中