js-设计模式之单例模式简单理解和实践

/**
 * 单例模式
 * 接口请求 若是没有登陆 先登陆
 * 
*/

var loginInstance = null;

// 这是封装的公共请求
function request() {
  return new Promise((resolve, reject) => {
    login().then(() => {
      resolve()
    })
  })
}


// 这是请求1
function rq1() {
  request().then(() => {
    console.log('请求1');
  })
}

// 这是请求2
function rq2() {
  request().then(() => {
    console.log('请求2');
  })
}

// 这是请求3
function rq3() {
  request().then(() => {
    console.log('请求3');
  })
}


// 这是登陆请求
function login() {
  // 全局只有一个登陆实例 未登陆就先登陆 登陆了就返回登陆实例
  if (loginInstance) {
    return loginInstance
  } else {
    loginInstance = new Promise((resolve, reject) => {
      console.log('登陆中...');
      setTimeout(() => {
        console.log('登陆成功');
        resolve()
      }, 1000);
    })
    return loginInstance
  }
}


// 假设一个页面onLoad中调用了请求1,2,3
rq1()
rq2()
rq3()

// 假设2秒后才登陆成功
setTimeout(() => {
  login()
}, 2000);

posted @ 2023-08-10 14:01  zoo-x  阅读(21)  评论(0)    收藏  举报