使用 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);
    }

})();