Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save xgqfrms/e2085df36b87335dc5db201c5f13b5ba to your computer and use it in GitHub Desktop.
Save xgqfrms/e2085df36b87335dc5db201c5f13b5ba to your computer and use it in GitHub Desktop.
How to use Promise and setTimeout to mock an API call in JavaScript

How to use Promise and setTimeout to mock an API call in JavaScript

如何使用 Promise 和 setTimeout 在 JavaScript 中模拟 API 调用

args list version

const getMockData = async (data = '', error = 'unknown server error', delay) => {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      if(!!data) {
        resolve({
          type: 'Success ✅',
          data,
        });
      } else {
        reject({
          type: 'Error ❌',
          message: error,
        });
      }
    }, delay || 1000);
  });
}

// test cases
(async () => {
  try {
    const success = await getMockData([1,2,3]);
    console.log(success.data);
  } catch (err) {
    console.log(err.message);
  }
  try {
    const error = await getMockData('', '404 not found error', 3000);
    console.log(error);
  } catch (err) {
    console.log(err.message);
  }
})();

args object version

const getMockData = async (options = {
  data: '',
  error: 'unknown server error',
  delay: null
}) => {
  const {data, error, delay} = options;
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      if(!!data) {
        resolve({
          type: 'Success ✅',
          data,
        });
      } else {
        reject({
          type: 'Error ❌',
          message: error,
        });
      }
    }, delay || 1000);
  });
}

// test cases
(async () => {
  try {
    const success = await getMockData({data: [1,2,3]});
    console.log(success.data);
  } catch (err) {
    console.log(err.message);
  }
  try {
    const error = await getMockData({error: '404 not found error', delay: 3000});
    console.log(error);
  } catch (err) {
    console.log(err.message);
  }
})();