我正在使用Soundcloud API,但是這個問題是關於捕捉一般錯誤的。從外部腳本中的函數捕獲錯誤
我嘗試加載一個曲目,並且由於某些特定於該曲目的設置或限制,會得到一個403 (Forbidden)
響應。
<script src="https://connect.soundcloud.com/sdk/sdk-3.1.2.js"></script>
後來,在我的客戶端JavaScript:這個錯誤是我加載在我<head>
的SoundCloud的腳本中拋出
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 - 這是該曲目的'可讀'網址,它的是解析爲正確的曲目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();
});
謝謝約瑟夫,看看我上面的更新。將'error'記錄到控制檯並沒有給我太多的信息:'{message:「HTTP Error:403」,status:403}'但現在我可以繼續後退了。 –