我具有以下功能,该功能发出ajax请求或从API提取数据。
function getSegements(url) {
return new Promise((resolve, reject) => {
request = new XMLHttpRequest();
request.open('GET', url);
request.setRequestHeader('Content-Type', 'application/json');
// request.onload = () => resolve(request.response);
// request.onerror = () => reject(request.status);
request.onreadystatechange = function() {
if (request.readyState === 4)
{
if (request.status === 200)
{
data = JSON.parse(request.response);
console.log(data.segements);
resolve(data);
}
else
{
reject({status: request.status});
}
}
};
request.send();
});
}
调用函数:
getSegements(url).then((data) => {
//console.log(data);
//data = JSON.parse(data);
theWheel = new Winwheel({
'outerRadius' : 212,
'textFontSize' : 16,
'textOrientation' : 'horizontal',
'textAlignment' : 'outer',
'numSegments' : data.no,
'segments' : data.segements,
'animation' : // Specify the animation to use.
{
'type' : 'spinToStop',
'duration' : 5, // Duration in seconds.
'spins' : 3, // Default number of complete spins.
'callbackFinished' : alertPrize
}
});
theWheel.animation.spins = 9;
wheelSpinning = false;
})
.catch((err)=>{
console.log(err);
alert('Request failed. Returned status of ' + err.status);
});
如果WinWheel的参数有问题,它将运行 catch 块。为什么这样跑?是否要运行 then()或 catch()取决于函数(在本例中为 getSegements )?>
答案 0 :(得分:2)
then()
也会返回Promise,并且未捕获的异常会在整个调用链中传播,直到找到catch()
,因此catch()
会运行在调用链中捕获的任何异常>
new Promise((res, rej) => {
res()
}).then(() => {
throw "in then"
}).catch(e => console.log(e))
答案 1 :(得分:1)
实际上atom
带有两个参数,一个函数在一切正常时调用,而另一个函数在前一个链发生错误时调用。您可以写:
.then
现在使用 getSegments(url).then(
data => { new Whinweel() },
error => console.log(error)
);
实际上与.catch(handler)
相同,并且如前所述,如果前一个链中有错误(包括先前的“ then”处理程序)发生错误,则将调用错误处理程序。 / p>