If tutorials available on this website are helpful for you, please whitelist this website in your ad blocker😭 or Donate to help us ❤️ pay for the web hosting to keep the website running.
NestJS में Asynchronous Providers वो providers होते हैं जो asynchronous
tasks को handle करते हैं, जैसे:
External APIs से data fetch करना।
Third-party libraries को asynchronously configure करना।
Asynchronous providers का main काम यह होता है कि application को initialize करते वक्त asynchronous tasks को complete करके required values को inject
कर सकें।
यह useFactory
का concept use करते हैं जो Promise या async logic को handle करता है।
●●●
Async Providers का concept mainly factory functions पर based होता है, जहाँ हम asynchronous logic को resolve करते हैं।
NestJS में asynchronous providers को define करने के लिए हम useFactory
का use करते हैं, जो asynchronous data return करता है।
Async providers को configure करने का basic syntax कुछ इस तरह होता है -
{
provide: 'ASYNC_SERVICE',
useFactory: async () => {
const asyncValue = await someAsyncFunction();
return asyncValue;
}
}
यहां -
provide : यह define करता है कि provider किस token के साथ register हो रहा है।
useFactory : यह एक asynchronous function है जो Promise return करता है।
●●●
चलिए अब एक basic structure को समझते हैं जिसमे एक external API से data fetch करने के लिए asynchronous provider बनाया गया है।
हम एक asynchronous provider बनाएंगे जो किसी external API से data fetch करेगा और application में inject
करेगा।
File : src/providers/async-api.provider.ts
import { Injectable } from '@nestjs/common';
import axios from 'axios';
@Injectable()
export class AsyncApiService {
async fetchData() {
const response = await axios.get('https://api.example.com/data');
return response.data;
}
}
यहां AsyncApiService एक service है जो asynchronous axios.get
request के through external API से data fetch करता है।
अब हम इस asynchronous provider को useFactory
के साथ register करेंगे।
File : src/app.module.ts
import { Module } from '@nestjs/common';
import { AsyncApiService } from './providers/async-api.provider';
@Module({
providers: [
{
provide: 'ASYNC_API_SERVICE',
useFactory: async () => {
const asyncService = new AsyncApiService();
const data = await asyncService.fetchData();
return data; // Yeh data inject kiya jayega
},
},
],
exports: ['ASYNC_API_SERVICE'],
})
export class AppModule {}
यहां -
provide : ASYNC_API_SERVICE
को provider token दिया गया है।
useFactory : यह factory asynchronous function को handle कर रहा है और API से fetched data को resolve कर रहा है।
●●●
चलिए एक और example लेते हैं जिसमे हम एक MongoDB database connection को async
provider के through inject करते हैं।
File : src/providers/database.provider.ts
import { MongoClient } from 'mongodb';
export const databaseProvider = {
provide: 'DATABASE_CONNECTION',
useFactory: async (): Promise<MongoClient> => {
const client = new MongoClient('mongodb://localhost:27017');
await client.connect(); // Asynchronously connection open kar rahe hain
return client;
},
};
ऊपर example में -
MongoClient को asynchronously connect किया गया है।
Provider DATABASE_CONNECTION के साथ register हो रहा है।
File : src/app.module.ts
import { Module } from '@nestjs/common';
import { databaseProvider } from './providers/database.provider';
@Module({
providers: [databaseProvider],
exports: ['DATABASE_CONNECTION'],
})
export class AppModule {}
यहां हमने database provider को app
module में register किया है ताकि DATABASE_CONNECTION
को inject किया जा सके।
File : src/app.controller.ts
import { Controller, Get, Inject } from '@nestjs/common';
import { MongoClient } from 'mongodb';
@Controller()
export class AppController {
constructor(@Inject('DATABASE_CONNECTION') private readonly dbClient: MongoClient) {}
@Get('db-status')
getDatabaseStatus() {
return this.dbClient.isConnected() ? 'Database Connected' : 'Database Disconnected';
}
}
यहां:
@Inject('DATABASE_CONNECTION')
के through MongoDB client को inject किया गया है।
getDatabaseStatus()
method database के connection status को check करता है।
●●●
कभी-कभी async providers में आपको दूसरे providers कि need होती है, तो आप easily dependencies को inject
कर सकते हैं।
इसका syntax कुछ इस तरह होता है -
{
provide: 'DEPENDENT_PROVIDER',
useFactory: async (someService: SomeService) => {
const result = await someService.getData();
return result;
},
inject: [SomeService],
}
इस example में -
inject : यह बताता है कि useFactory में SomeService को inject करना है।
someService.getData()
को asynchronous call करके result return किया जा रहा है।
●●●
Error Handling : Async providers में asynchronous tasks handle करते वक्त proper error handling का ध्यान रखें। जैसे try-catch
का use करें ताकि errors को effectively manage किया जा सके।
Avoid Long Operations In Providers : Providers में heavy or long-running operations को avoid करें। अगर आपको ऐसे operations handle करने हैं, तो उन्हें अलग services में move करें और उन services को inject
करें।
Use Dependency Injection : अगर async providers में आपको दूसरे services या providers कि need हो, तो हमेशा inject property
का use करें ताकि dependencies properly manage हो सकें।
Testing Async Providers : जब async providers का test करते हैं, तो उन्हें easily mock या stub करें। Testing asynchronous logic में Promise को resolve करने का ध्यान रखें।
●●●
NestJS में Asynchronous Providers asynchronous tasks को handle करने का एक efficient तरीका है, जैसे database connections, external API requests, या third-party services को integrate करना।
इस topic में हमने समझा कि कैसे async providers
काम करते हैं, कैसे उन्हें configure करते हैं, और कैसे उन्हें dependency injection के साथ use करते हैं।
Asynchronous providers को सही तरीके से implement करने से आप अपनी application को ज़्यादा flexible और scalable बना सकते हैं।