记录js简单函数

几个简单方法记录

加载图片


export function loadImg(imgUrl) {
  return new Promise(function (resolve, reject) {
    var image = new Image();
    image.src = imgUrl;
    image.onload = function () {
      resolve([imgUrl]);
    };
    image.onerror = function () {
      reject(new Error(`${imgUrl}图片加载失败...`));
    };
  });
}

// 使用
await loadImg('xxx');

加载js


export function loadJs(absoluteSrc) {
  // 防止多次加载同一个文件
  let promise = loadJs.cache.get(absoluteSrc);
  if (!promise) {
    promise = new Promise((resolve, reject) => {
      let script = document.createElement('script');
      script.type = 'text/javascript';
      script.src = absoluteSrc;
      document.body.appendChild(script);
      script.onload = () => {
        resolve();
      };
      script.onerror = () => {
        reject();
      };
    });
  }
  loadJs.cache.set(absoluteSrc, promise);
  return promise;
}
loadJs.cache = new Map();

// 使用
await loadJs('/xxx/xx.js');

延时等待


export const delay = (ms) => new Promise(res => setTimeout(res, ms));

// 使用, 延时1s;
await delya(1000);

处理异步执行


export function makeDefer() {
  let defer = null;
  const p = new Promise((resolve, reject) => {
    defer = { resolve, reject };
  });
  Object.assign(p, defer);
  return p;
}


// 使用
let num = 0;
const fun = (defer) => {
  setTimeout(() => {
    num = 3;
    defer.resolve();
  }, 2000);
}
const fun2 = async () => {
  let defer = makeDefer();
  fun(defer);
  await defer;
  console.log(num);
}
fun2();

时间格式化


// 时间格式化
export function str_date(udate = new Date(), format = 'yyyy-MM-dd hh:mm:ss') {
  let newDate;
  if (udate instanceof Date) {
    newDate = udate;
  } else {
    newDate = new Date(udate);
  }
  let date = {
    'M+': newDate.getMonth() + 1,
    'd+': newDate.getDate(),
    'h+': newDate.getHours(),
    'm+': newDate.getMinutes(),
    's+': newDate.getSeconds(),
    'q+': Math.floor((newDate.getMonth() + 3) / 3),
    'S+': newDate.getMilliseconds(),
  };
  if (/(y+)/i.test(format)) {
    format = format.replace(RegExp.$1, (newDate.getFullYear() + '').substr(4 - RegExp.$1.length));
  }
  for (let k in date) {
    if (new RegExp('(' + k + ')').test(format)) {
      format = format.replace(RegExp.$1, RegExp.$1.length == 1 ? date[k] : ('00' + date[k]).substr(('' + date[k]).length));
    }
  }
  return format;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值