hmu332233 / tips

https://tips.minung.dev
1 stars 0 forks source link

js tips #25

Open hmu332233 opened 3 years ago

hmu332233 commented 3 years ago

Search Keyword

hmu332233 commented 3 years ago

reduce를 이용한 promise 순차 실행

userIds.reduce(async (prevPromise, userId) => {
  await prevPromise;
  return methodThatReturnsAPromise(userId);
}, Promise.resolve());

reduce를 이용하여 promise chain을 만드는 방식이기 때문에 이전 값을 넘겨주는 것도 가능

const targetUsers = conditions.reduce(async (prevPromise, condition) => {
  const users = await prevPromise;
  return methodThatReturnsAPromise(condition, users);
}, Promise.resolve([]));

참고: https://blog.shiren.dev/2018-10-24-reduce()%EB%A5%BC-%EC%9D%B4%EC%9A%A9%ED%95%B4-%EC%88%9C%EC%B0%A8%EC%A0%81%EC%9C%BC%EB%A1%9C-%ED%94%84%EB%A1%9C%EB%AF%B8%EC%8A%A4%EB%A5%BC-%ED%95%B4%EA%B2%B0%ED%95%98%EB%8A%94-%EB%B0%A9%EB%B2%95/

hmu332233 commented 3 years ago

초를 mm:ss 형식으로 출력

new Date(SECONDS * 1000).toISOString().substr(14, 5)
hmu332233 commented 2 years ago

url의 query string 변경하기

function replaceQueryInUrl(key, value) {
  const params = new URLSearchParams(window.location.search)
  if (value.length < 1) {
    params.delete(key)
  } else {
    params.set(key, value)
  }
  return '?' + params.toString();
}

window.history.replaceState(null, '', replaceQueryInUrl('q', '질문입니다'))
window.history.replaceState(
  window.history.state,
  '',
  window.location.pathname + queryString,
)
hmu332233 commented 1 year ago

default 값 덮어씌워주기

/**
 * 주어진 객체의 필드에 대한 기본값을 설정
 * 객체의 필드마다 기본값을 보장해준다
 *
 * @param {Object} target - 기본값을 설정할 대상 객체.
 * @param {Object} defaults - 기본값을 포함한 객체.
 */
function ensureDefaults(target, defaults) {
    const result = { ...target };

    for (const key of Object.keys(defaults)) {
        if (typeof defaults[key] === 'object' && defaults[key] !== null) {
            result[key] = ensureDefaults(result[key] ?? {}, defaults[key]);
        } else if (!(key in result)) {
            result[key] = defaults[key];
        }
    }

    return result;
}