Erstens, bitte schauen Sie sich diese Demo an.In Versprechen von es6 ist ".catch (Ablehnung)" gleich ".then (null, Ablehnung)"?
function loadImageAsync(url) {
return new Promise(function(resolve, reject) {
var image = new Image();
image.src = url;
// onload 在对象已加载时触发
image.onload = resolve;
// onerror 在文档或图像加载过程中发生错误时被触发
image.onerror = reject;
})
}
var someImgEle = document.getElementById("imgEle");
var url = someImgEle.dataset.src
loadImageAsync(url).then(function() {
someImgEle.src = url;
someImg.style.display = "block";
// error will be printed
}).catch(function() {
console.log("error")
throw new Error('couldnt load image' + url);
})
/*
loadImageAsync(url).then(function(){
someImgEle.src = url;
someImg.style.display = "block";
// error will be not printed
},function() {
console.log("error")
\t throw new Error('couldnt load image' + url);
})
*/
<img id="imgEle" src="" data-src="http://omizt4opc.bkt.clouddn.com/avatar.jpg" alt="">
In dieser Demo, denke ich, dass "Fehler" kann nicht gedruckt werden. Die Tatsache tut mir weh.
Kürzlich studiere ich Promise von url.
Aber diese Demo scheint dazu konfliktreich zu sein.
Ich bin verwirrt.
Ich verstehe nicht, warum Sie denken, dass Fehler nicht gedruckt werden kann. – zeroflagL
, um die Frage im Titel zu beantworten (die getrennt von dem Text im Körper der Frage scheint) ... ja, '.catch (onReject)' ist genau gleich '.then (null, onReject)' - aber NICHT das gleiche wie '.then (onFulfill, onReject)' - in der Tat, das Polyfill, das ich benutze, hat dieses Bit Code drin 'Promise.prototype.catch = function (onRejected) { gib das zurück.dann (null, onRejected); }; ' –