javascript 小tips

109 阅读1分钟

1. 多个请求同时发起时, 如何知道所有接口是否回调成功

在业务中,常见多个同一类型请求同时发起,需要知道所有同一类型接口是否回调成功。比如有20张oss图片链接需要知道每张图片大小,现有的接口参数只能接受一张图片并且有逻辑需要在所有接口回调成功之后才能执行

let imageList =  [url1, url2,url3]

for (let j = 0; j < imageList.length; j++) {
    // 对每个 OSS 链接发起请求,并将请求的 Promise 存储到数组中
    const promise = new Promise((resolve, reject) => {
        wx.request({
            url: this.urlDetail +  '/v1/commons/file-url/size?fileUrl=' + imageList[j] ,
            method: 'get',
            header:util.author(),
            success: (res) => {
                const { result,msg,data } =res.data
                console.log('图片大小:', res);
                let fileSize= data.size/1024
                resolve({
                       fileSize: fileSize,                                                                      materialname:this.materialsList[i].materialname
                });
            },
        });
    });
    promises.push(promise);
 }

Promise.all(promises).then((results) => {
    console.log('所有请求已完成');
    console.log('所有图片大小:', results);
    // 执行相关逻辑
    .catch((err) => {
        Toast(err);
        console.log('至少有一个请求失败:', err);
    });

2. 如何中断forEach循环

在日常业务中,经常需要循环校验某种条件,如果一旦触发限制就要立即中断循环触发错误提示,比如上述的20张图片回调成功之后 需要判断是否存在图片小于15kb 如果存在就提示错误,并且结束循环。

 try {
     results.forEach((item,index)=>{
         if(item.fileSize < 15){
             throw(item)
             return false
         }
     })
 } catch (error) {
     return  Toast(error.materialname+'中有影像小于15KB,请检查后重新上传。');
 }