Если вы не непосредственно внутри конструктора Promise, вы не можете вызвать reject
, потому что он не находится в области видимости. Но если вы выбросите ошибку внутри .then
, вы можете заставить поток управления перейти к следующему .catch
в цепочке (пропуская .then
с между):
let promise = new Promise((resolve, reject) => {
imgToDisplay.onload = () => {
resolve(imgToDisplay.width);
}
})
.then((result) => {
window.URL.revokeObjectURL(imgToDisplay.src);
if (result >= 20)
// This will result in the Promise being rejected:
throw new Error('Image width too large');
})
.then(() => {
//I do something with the image file here if it is not rejected
})
.catch((e) => {
alert(e.message); //This happened, however "reject is not defined"
});
В этом случае, хотя, поскольку тест, который приводит к отклонению Promise, может быть выполнен в конструкторе Promise , вы можете вместо этого вызвать reject
в конструкторе, если хотите:
let promise = new Promise((resolve, reject) => {
imgToDisplay.onload = () => {
if (imgToDisplay.width >= 20) {
reject('Image width too large');
}
resolve(imgToDisplay.width);
}
})