Promise异步加载图片

Promise异步加载图片

异步加载:也称为图片的预加载。利用js代码提前加载图片,用户需要时可以直接从本地缓存获取,但是会增加服务器前端的压力。这样做可以提高用户的体验,因为同步加载大图片的时候,图片会一层一层的显示处理,但是经过预加载后,直接显示出整张图片。但是在图片响应时间上优化不是那么明显。

使用promise

代码如下:

function asyncLoadImg(src) {
    const promise = new Promise((resolve, reject) => {
        const img = document.createElement('img')
        // onload 事件会在页面或图像加载完成后立即发生。
        img.onload = () => {
            resolve(img)
        }
        
        img.onerror = () => {
            const error = new Error(`图片加载失败,url:${src}`)
            reject(error)
        }
        img.src = src
    })
    return promise
}
const url = 'https://t7.baidu.com/it/u=4036010509,3445021118&fm=193&f=GIF'
const url2 = 'https://t7.baidu.com/it/u=963301259,1982396977&fm=193&f=GIF'
asyncLoadImg(url)
.then(img1 => {
    console.log(img1);
    return asyncLoadImg(url2)
})
    .then(img2 => {
        console.log(img2);
    })
.catch(error => {
    console.log(error);
})

使用async await

代码如下:

function asyncLoadImg(src){
    return new Promise((resolve, reject)=>{
        const img = document.createElement('img')
        img.onload = () => {
            resolve(img)
        }
        img.onerror = () => {
            const error = new Error(`图片加载失败,url:${src}`)
            reject(error)
        }
        img.src = src
    })
}

async function loadImg(src){
    let res =await asyncLoadImg(src)
    console.log(res)
}

const url = 'https://t7.baidu.com/it/u=4036010509,3445021118&fm=193&f=GIF'
const url2 = 'https://t7.baidu.com/it/u=963301259,1982396977&fm=193&f=GIF'

loadImg(url).then(img1 => {
    console.log(img1);
    return loadImg(url2)
}).then(img2 => {
    console.log(img2);
}).catch(error => {
    console.log(error);
})
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Cesium是一个用于创建地球和其他天体的3D地理信息系统(GIS)可视化的开源JavaScript库。在Cesium中,异步加载是一种常见的技术,用于在加载大型数据集或复杂场景时提高性能和用户体验。 异步加载是指在加载资源时,不会阻塞主线程,而是通过并行加载和渲染来提高效率。在Cesium中,异步加载主要应用于以下几个方面: 1. 模型加载:Cesium支持加载各种3D模型格式,如glTF、COLLADA等。当加载大型模型时,可以使用异步加载来避免页面卡顿或加载时间过长的问题。 2. 影像加载:Cesium可以加载各种影像数据,如卫星影像、地形数据等。由于影像数据通常较大,使用异步加载可以提高加载速度和用户体验。 3. 矢量数据加载:Cesium支持加载各种矢量数据格式,如GeoJSON、KML等。当加载大量矢量数据时,可以使用异步加载来提高性能和交互响应速度。 在Cesium中,异步加载通常通过使用Promise对象来实现。Promise是一种用于处理异步操作的对象,它可以表示一个异步操作的最终完成或失败,并返回相应的结果。 下面是一个示例代码,演示了如何使用异步加载加载一个3D模型: ```javascript // 创建一个Promise对象 var promise = Cesium.Model.fromGltf({ url: 'path/to/model.gltf', basePath: 'path/to/assets' }); // 当模型加载完成后,执行回调函数 promise.then(function(model) { // 将模型添加到场景中 viewer.scene.primitives.add(model); }).otherwise(function(error) { // 加载失败时的处理逻辑 console.log('An error occurred: ' + error); }); ``` 在上面的代码中,`Cesium.Model.fromGltf`方法返回一个Promise对象,表示模型的异步加载过程。通过调用`then`方法和`otherwise`方法,可以分别指定加载成功和失败时的回调函数。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值