使用 ES2017 asyncawait

上面的相同示例, Image 載入 ,可以使用非同步函式編寫。這也允許使用常見的 try/catch 方法進行異常處理。

注意: 截至 2017 年 4 月,所有瀏覽器的當前版本,但 Internet Explorer 支援非同步功能

function loadImage(url) {
    return new Promise((resolve, reject) => {
        const img = new Image();
        img.addEventListener('load', () => resolve(img));
        img.addEventListener('error', () => {
            reject(new Error(`Failed to load ${url}`));
        });
        img.src = url;
    });
}

(async () => {

    // load /image.png and append to #image-holder, otherwise throw error
    try {
        let img = await loadImage('http://example.com/image.png');
        document.getElementById('image-holder').appendChild(img);
    }
    catch (error) {
        console.error(error);
    }

})();