Mengelola Kesalahan Timeout dan Delay di Node.js

dani indra

Mengelola Kesalahan Timeout dan Delay di Node.js

Dalam pengembangan aplikasi Node.js, pengelolaan kesalahan timeout dan delay sangat penting untuk memastikan aplikasi berjalan dengan lancar dan responsif. Artikel ini akan membahas berbagai cara untuk mengelola kesalahan terkait timeout dan delay di Node.js.

1. Mengatasi Kesalahan Timeout pada Fungsi Asinkron

Menggunakan Promise.race:

function withTimeout(promise, timeout) {
  const timeoutPromise = new Promise((_, reject) =>
    setTimeout(() => reject(new Error('Waktu tunggu habis')), timeout)
  );

  return Promise.race([promise, timeoutPromise]);
}

// Contoh penggunaan
const asyncFunction = () => new Promise(resolve => setTimeout(() => resolve('Berhasil'), 500));

withTimeout(asyncFunction(), 1000)
  .then(result => console.log(result))
  .catch(error => console.error('Kesalahan:', error.message));

2. Mengatasi Delay yang Tidak Diharapkan

Menggunakan setTimeout dan Promise:

function delay(ms) {
  return new Promise(resolve => setTimeout(resolve, ms));
}

// Contoh penggunaan
async function main() {
  console.log('Aksi pertama');
  await delay(1000);
  console.log('Aksi kedua setelah delay');
}

main();

3. Mengelola Kesalahan Timeout pada Koneksi HTTP

Menggunakan axios (Pustaka HTTP):

const axios = require('axios');

async function fetchDataWithTimeout(url, timeout) {
  try {
    const response = await axios.get(url, { timeout });
    return response.data;
  } catch (error) {
    if (error.code === 'ECONNABORTED' && error.message.includes('timeout')) {
      throw new Error('Waktu tunggu koneksi habis');
    }
    throw error;
  }
}

// Contoh penggunaan
const apiUrl = 'https://api.example.com/data';
const timeoutInMilliseconds = 5000;

fetchDataWithTimeout(apiUrl, timeoutInMilliseconds)
  .then(data => console.log('Data diterima:', data))
  .catch(error => console.error('Kesalahan:', error.message));

4. Mengatasi Kesalahan Timeout pada Kueri Database MongoDB

Menggunakan mongoose (ODM untuk MongoDB):

const mongoose = require('mongoose');

async function performDatabaseQueryWithTimeout(query, timeout) {
  try {
    const result = await query.exec();
    return result;
  } catch (error) {
    if (error.name === 'MongoNetworkError' && error.message.includes('timed out')) {
      throw new Error('Waktu tunggu koneksi database habis');
    }
    throw error;
  }
}

// Contoh penggunaan
const User = mongoose.model('User', new mongoose.Schema({ name: String }));

const query = User.find({}).limit(10);
const timeoutInMilliseconds = 3000;

performDatabaseQueryWithTimeout(query, timeoutInMilliseconds)
  .then(users => console.log('Data pengguna:', users))
  .catch(error => console.error('Kesalahan:', error.message));

Kesimpulan

Mengelola kesalahan terkait timeout dan delay di Node.js merupakan bagian penting dari pengembangan aplikasi yang handal dan responsif. Dengan menggunakan teknik-teknik seperti Promise.race, setTimeout, dan mengatasi kesalahan secara spesifik pada pustaka eksternal seperti axios atau mongoose, Anda dapat memastikan bahwa aplikasi Node.js Anda dapat mengatasi situasi timeout dengan elegan dan memberikan respons yang baik kepada pengguna. Selalu pertimbangkan konteks aplikasi Anda dan pilih metode yang paling sesuai dengan kebutuhan Anda.

Leave a Comment