নোডজে একক প্যাটার্ন - এটি কি প্রয়োজন?


97

আমি সম্প্রতি এই নিবন্ধটি জুড়ে এসেছি কীভাবে নোড.জেএস-তে একটি সিঙ্গলটন লিখবেন on আমি ডকুমেন্টেশন জানেন require রাজ্যের যে:

মডিউলগুলি প্রথমবার লোড হওয়ার পরে তা ক্যাশে করা হয়। একাধিক কলগুলির require('foo')কারণে মডিউল কোডটি একাধিকবার সম্পাদিত হতে পারে না।

সুতরাং মনে হচ্ছে প্রতিটি প্রয়োজনীয় মডিউল সহজেই সিঙ্গলটন বয়লারপ্লেট কোড ছাড়াই সিঙ্গলটন হিসাবে ব্যবহার করা যেতে পারে।

প্রশ্ন:

উপরের নিবন্ধটি কি সিঙ্গলটন তৈরির সমাধান সম্পর্কে একটি চক্র সরবরাহ করে?


4
এখানে একটি 5 মিনিট। এই বিষয়ে ব্যাখ্যা (V6 এবং npm3 পর লিখিত): medium.com/@lazlojuly/...
lazlojuly

উত্তর:


60

এটি মূলত নোডেজ ক্যাশে করার সাথে সম্পর্কিত। মসৃন এবং সাধারণ.

https://nodejs.org/api/modules.html#modules_caching

(v 6.3.1)

ক্যাচিং

মডিউলগুলি প্রথমবার লোড হওয়ার পরে তা ক্যাশে করা হয়। এর অর্থ (অন্যান্য জিনিসগুলির মধ্যে) যা প্রতিটি কল ('foo') প্রয়োজন হয় ঠিক একই জিনিসটি ফিরে আসবে, যদি এটি একই ফাইলটিতে সমাধান হয়।

একাধিক কল প্রয়োজন ('foo') মডিউল কোড একাধিকবার কার্যকর করা হতে পারে না। এটি একটি গুরুত্বপূর্ণ বৈশিষ্ট্য। এটির সাথে, "আংশিকভাবে সম্পন্ন" অবজেক্টগুলি ফিরিয়ে আনা যেতে পারে, এভাবে ট্রানসিটিভ নির্ভরতা লোড হতে দেয় এমনকি যখন তারা চক্রের কারণ হয়।

আপনি যদি মডিউলটি একাধিকবার কোড এক্সিকিউট করতে চান তবে কোনও ফাংশন রফতানি করুন এবং সেই ফাংশনটি কল করুন।

মডিউল ক্যাচিং গুহা

মডিউলগুলি তাদের সমাধান করা ফাইলের উপর ভিত্তি করে ক্যাশে করা হয়। যেহেতু মডিউলগুলি কলিং মডিউলটির অবস্থানের ভিত্তিতে (নোড_মডিউলগুলি ফোল্ডারগুলি লোড করে) ভিন্ন ফাইলের নামটি সমাধান করতে পারে, তাই এটির কোনও গ্যারান্টি নয় যে ('foo') সর্বদা সঠিক একই জিনিসটি ফিরিয়ে দেবে, যদি এটি বিভিন্ন ফাইলগুলিতে সমাধান করে would ।

অতিরিক্ত হিসাবে, কেস-সংবেদনশীল ফাইল সিস্টেম বা অপারেটিং সিস্টেমগুলিতে, বিভিন্ন সমাধান করা ফাইলের নাম একই ফাইলটিতে নির্দেশ করতে পারে তবে ক্যাশে তাদের এখনও আলাদা মডিউল হিসাবে বিবেচনা করবে এবং একাধিকবার ফাইল পুনরায় লোড করবে। উদাহরণস্বরূপ, প্রয়োজন ('./ foo') এবং ('./ FOO') প্রয়োজন। /Foo এবং ./FOO একই ফাইল কিনা তা নির্বিশেষে দুটি পৃথক বস্তু ফেরত দেয়।

সহজ কথায়।

যদি আপনি একটি সিঙ্গলটন চান; একটি পণ্য রফতানি

আপনি যদি সিঙ্গলটন না চান; একটি ফাংশন রফতানি করুন (এবং জিনিস / রিটার্ন স্টাফ / যে ফাংশনে যাই হোক না কেন)।

খুব স্পষ্ট করে বলার জন্য, আপনি যদি এটি সঠিকভাবে করেন তবে এটি কাজ করা উচিত, https://stackoverflow.com/a/33746703/1137669 (অ্যালেন লুসের উত্তর) দেখুন at এটি কোডে ব্যাখ্যা করে যে যখন ভিন্নভাবে সমাধান করা ফাইলের কারণে ক্যাশে ব্যর্থ হয় তখন কী হয়। তবে আপনি যদি একই ফাইল নামটি স্থির করে থাকেন তবে এটি কাজ করা উচিত।

২০১ Update আপডেট করুন

esode চিহ্ন সহ নোড.জেজে একটি সত্য সিঙ্গলটন তৈরি করা অন্য সমাধান : এই লিঙ্কে

আপডেট 2020

এই উত্তরটি কমনজেএসকে বোঝায় (নোড.জেএস এর নিজস্ব / আমদানি রফতানি মডিউলগুলির নিজস্ব উপায়)। নোড.জেএস সম্ভবত ECMAScript মডিউলগুলিতে স্যুইচ করবে : https://nodejs.org/api/esm.html (আপনি যদি না জানতেন তবে জাভা স্ক্রিপ্টের আসল নাম ইসিএমএসক্রিপ্ট)

ইসিএমএসক্রিপ্টে স্থানান্তরিত করার জন্য এখনের জন্য নিম্নলিখিতটি পড়ুন: https://nodejs.org/api/esm.html#esm_writing_dual_packages_ yet_avoider_or_minimizing_hazards


4
যদি আপনি একটি সিঙ্গলটন চান; একটি বস্তু রফতানি করুন ... যা ধন্যবাদ সাহায্য করেছে
danday74

4
এটি এই ধরণের খারাপ ধারণা - এই পৃষ্ঠায় অন্য কোথাও দেওয়া বিভিন্ন কারণে - তবে ধারণাটি মূলত বৈধ, যা বলতে গেলে প্রতিষ্ঠিত নামমাত্র পরিস্থিতিতে এই উত্তরের দাবীগুলি সত্য। আপনি যদি দ্রুত এবং নোংরা সিঙ্গলটন চান, এটি সম্ভবত কাজ করবে - কোড সহ কোনও শাটল চালু করবেন না।
অ্যাডাম টোলি

@ অ্যাডামটোলি "এই পৃষ্ঠায় অন্য কোথাও প্রদত্ত বিভিন্ন কারণে", আপনি কি সিমলিংকিং ফাইল বা ভুল বানান ফাইলের নাম উল্লেখ করছেন যা সম্ভবত একই ক্যাশে ব্যবহার করে না? এটি ডকুমেন্টেশনে কেস-সংবেদনশীল ফাইল সিস্টেম বা অপারেটিং সিস্টেম সম্পর্কিত ইস্যুটি উল্লেখ করে। সিমলিংকিং সম্পর্কিত, github.com/nodejs/node/issues/3402 নিয়ে আলোচনা হওয়ার কারণে আপনি এখানে আরও পড়তে পারেন । এছাড়াও আপনি যদি ফাইলগুলি সিমিলিং করছেন বা আপনার ওএস এবং নোডটি সঠিকভাবে বুঝতে না পারছেন তবে আপনার মহাকাশ প্রকৌশল শিল্পের কাছাকাছি কোথাও হওয়া উচিত নয়;), তবে আমি আপনার বিষয়টি বুঝতে পারি না ^^ ^^
বেসিকরেল

@ কার্লমরিসন - কেবলমাত্র ডকুমেন্টেশনটি গ্যারান্টি দেয় না, এটি মনে হয় যে এটি অনির্দিষ্ট আচরণ বা ভাষাটির এই বিশেষ আচরণকে বিশ্বাস না করার কোনও যুক্তিযুক্ত কারণ বলে মনে হচ্ছে। সম্ভবত ক্যাশে অন্য কোনও প্রয়োগে আলাদাভাবে কাজ করে, বা আপনি REPL- তে কাজ করতে এবং ক্যাচিং বৈশিষ্ট্যটিকে সম্পূর্ণরূপে বিপর্যস্ত করতে চান। আমার বক্তব্যটি হ'ল ক্যাশে একটি বাস্তবায়ন বিশদ, এবং এটি একটি সিঙ্গলটন সমতুল্য হিসাবে ব্যবহার একটি চালাক হ্যাক। আমি চতুর হ্যাকগুলি পছন্দ করি তবে তাদের পার্থক্য করা উচিত, এগুলি সবই - (এছাড়াও কেউ নোড দিয়ে শাটল বাজারে আনছে না, আমি মূর্খ হয়ে যাচ্ছিলাম)
অ্যাডাম টলি

138

উপরের সবগুলিই overcomplicated। চিন্তাভাবনার একটি স্কুল রয়েছে যা বলে যে নকশার ধরণগুলি প্রকৃত ভাষার ঘাটতি দেখাচ্ছে।

প্রোটোটাইপ-ভিত্তিক ওওপি (শ্রেণিবিহীন) ভাষাগুলির কোনও একক প্যাটার্নের প্রয়োজন হয় না। আপনি সহজেই উড়ে একটি একক (টন) অবজেক্ট তৈরি করুন এবং তারপরে এটি ব্যবহার করুন।

নোডের মডিউলগুলির জন্য, হ্যাঁ, ডিফল্টরূপে সেগুলি ক্যাশে করা হয়, তবে আপনি যদি মডিউল পরিবর্তনগুলি হট-লোড করতে চান তবে এটি টুইট করা যেতে পারে।

তবে হ্যাঁ, আপনি যদি সর্বত্র ভাগ করা অবজেক্টটি ব্যবহার করতে চান তবে এটি মডিউল রফতানিতে রাখা ঠিক fine এটি কেবল "সিঙ্গলটন প্যাটার্ন" দিয়ে জটিল করবেন না, জাভাস্ক্রিপ্টে এর প্রয়োজন নেই।


27
এটি অদ্ভুত কারও উপকার হচ্ছে না ... এর জন্য একটি +1 আছেThere is a school of thought which says design patterns are showing deficiencies of actual language.
এসাইলিজা

64
সিঙ্গলেটগুলি কোনও অ্যান্টি-প্যাটার্ন নয়।
wprl

5
@ হার্বি, একাকী প্যাটার্নের অত্যধিক নির্দিষ্ট (এবং তাই ভুল) সংজ্ঞা বলে মনে হচ্ছে।
wprl

20
ডকুমেন্টেশন সার্চ: "একাধিক কল ( 'foo বিন্যাস') প্রয়োজন নাও হতে পারে কারণ মডিউল কোড একাধিক বার নিষ্পন্ন করা হবে।"। এটি "পারে না" বলে, এটি "করবে না" বলে না, সুতরাং কোনও অ্যাপ্লিকেশনটিতে মডিউল উদাহরণটি একবার তৈরি করা হয়েছে কীভাবে তা নিশ্চিত করা যায় তা জিজ্ঞাসা করা আমার দৃষ্টিকোণ থেকে একটি বৈধ প্রশ্ন।
xorcus

9
এটি বিভ্রান্তিকর যে এটি এই প্রশ্নের সঠিক উত্তর। @ মাইক যেমন নীচের দিকে নির্দেশ করেছেন, এটি সম্ভব যে কোনও মডিউল একাধিকবার লোড হয়ে যায় এবং আপনার দুটি উদাহরণ রয়েছে। আমি সেই সমস্যাটি নিয়ে আসছি যেখানে আমার কাছে কেবল নকআউটের একটি অনুলিপি আছে তবে দুটি উদাহরণ তৈরি হয়েছে কারণ মডিউলটি দু'বার লোড হয়েছে is
dgaviola

26

নং যখন নোড এর মডিউল ক্যাশে ব্যর্থ হয়, যে Singleton প্যাটার্ন ব্যর্থ। আমি ওএসএক্সে অর্থবহভাবে চালনার জন্য উদাহরণটি সংশোধন করেছি:

var sg = require("./singleton.js");
var sg2 = require("./singleton.js");
sg.add(1, "test");
sg2.add(2, "test2");

console.log(sg.getSocketList(), sg2.getSocketList());

এটি লেখককে প্রত্যাশিত আউটপুট দেয়:

{ '1': 'test', '2': 'test2' } { '1': 'test', '2': 'test2' }

তবে একটি ক্ষুদ্রতর পরিবর্তন ক্যাচকে পরাস্ত করে। ওএসএক্স-এ, এটি করুন:

var sg = require("./singleton.js");
var sg2 = require("./SINGLETON.js");
sg.add(1, "test");
sg2.add(2, "test2");

console.log(sg.getSocketList(), sg2.getSocketList());

অথবা, লিনাক্সে:

% ln singleton.js singleton2.js

তারপরে sg2প্রয়োজনীয় রেখাটি এতে পরিবর্তন করুন :

var sg2 = require("./singleton2.js");

এবং বাম , একক পরাজিত হয়েছে:

{ '1': 'test' } { '2': 'test2' }

আমি এটিকে ঘিরে ধরার কোনও গ্রহণযোগ্য উপায় জানি না। আপনি যদি সত্যই সিঙ্গলটনের মতো কিছু তৈরি করার প্রয়োজনীয়তা অনুভব করেন এবং বিশ্বব্যাপী নেমস্পেসকে দূষিত করার সাথে ঠিকঠাক (এবং এর ফলে তৈরি হতে পারে এমন অনেকগুলি সমস্যা), আপনি লেখকের লেখাগুলি getInstance()এবং exportsলাইনগুলিতে এই পরিবর্তন করতে পারেন :

singleton.getInstance = function(){
  if(global.singleton_instance === undefined)
    global.singleton_instance = new singleton();
  return global.singleton_instance;
}

module.exports = singleton.getInstance();

এটি বলেছিল, আমি কখনই এমন একটি প্রোডাকশন সিস্টেমে এমন পরিস্থিতি তৈরি করতে পারি নি যেখানে আমাকে এ জাতীয় কিছু করার দরকার ছিল। আমি জাভাস্ক্রিপ্টে একক প্যাটার্ন ব্যবহার করার প্রয়োজন অনুভব করি নি।


21

মডিউল দস্তাবেজগুলিতে মডিউল ক্যাশিং ক্যাভ্যাটগুলিতে আরও কিছুটা দেখার জন্য :

মডিউলগুলি তাদের সমাধান করা ফাইলের উপর ভিত্তি করে ক্যাশে করা হয়। যেহেতু মডিউলগুলি কলিং মডিউলটির অবস্থানের ভিত্তিতে (নোড_মডিউলগুলি ফোল্ডারগুলি লোড করে) ভিন্ন ফাইলের নামটি সমাধান করতে পারে, তাই এটির কোনও গ্যারান্টি নয় যে ('foo') সর্বদা সঠিক একই জিনিসটি ফিরিয়ে দেবে, যদি এটি বিভিন্ন ফাইলগুলিতে সমাধান করে would ।

সুতরাং, যখন আপনি কোনও মডিউল প্রয়োজন তখন আপনি কোথায় ছিলেন তার উপর নির্ভর করে মডিউলটির আলাদা উদাহরণ পাওয়া সম্ভব।

মডিউলগুলির মতো শব্দগুলি সিলেটলেট তৈরির কোনও সহজ সমাধান নয়

সম্পাদনা: বা সম্ভবত তারা হয় । @ এমকোরিয়াকের মতো, আমি এমন একটি মামলা নিয়ে আসতে পারছি না যেখানে কোনও একক ফাইল বিভিন্ন ফাইল-নাম (সিমলিঙ্ক ব্যবহার না করে) সমাধান করতে পারে। তবে (@ জন্নিএইচকে মন্তব্য হিসাবে), বিভিন্ন node_modulesডিরেক্টরিতে একটি ফাইলের একাধিক অনুলিপি প্রতিটি লোড করে আলাদাভাবে সংরক্ষণ করা হবে।


ঠিক আছে, আমি এটি 3 বার পড়েছি এবং আমি এখনও এটি একটি পৃথক ফাইলের নাম হিসাবে সমাধান করতে পারে যেখানে একটি উদাহরণ চিন্তা করতে পারি না। সাহায্য?
mkoryak

4
@ এমকোরিয়াক আমি মনে করি এটি সেই ক্ষেত্রে উল্লেখ করেছে যেখানে আপনি দুটি আলাদা মডিউল পেয়েছিলেন node_modulesযেখানে প্রতিটি একই মডিউলের উপর নির্ভর করে তবে দুটি ভিন্ন মডিউলের প্রতিটিের উপ- node_modulesডিরেক্টরিতে সেই নির্ভরশীল মডিউলটির আলাদা কপি রয়েছে ।
জননিএইচকে

@ মাইকে আপনি ঠিক এখানে আছেন যে মডিউলটি বিভিন্ন পাথের মাধ্যমে রেফারেন্স দেওয়ার সময় একাধিকবার ইনস্ট্যান্টিয়েটেড হয়। সার্ভার মডিউলগুলির জন্য ইউনিট পরীক্ষা লেখার সময় আমি মামলাটি আঘাত করি। আমার এক ধরণের সিঙ্গলটন উদাহরণ দরকার। কিভাবে এটি অর্জন?
সুশীল

একটি উদাহরণ আপেক্ষিক পথ হতে পারে। যেমন প্রদত্ত require('./db')দুটি পৃথক ফাইলে দেওয়া হয়েছে, dbমডিউলটির
কোডটি

9
নোড মডিউল সিস্টেমটি কেস-ইনসেনসেটিভ হওয়ায় আমার কেবল একটি বাজে বাগ হয়েছে। আমি require('../lib/myModule.js');একটি ফাইল এবং require('../lib/mymodule.js');অন্যটিতে ফোন করেছি এবং এটি একই বস্তুটি সরবরাহ করে না।
হায়ার্ন

19

নোড.জেজে (বা ব্রাউজার জেএসে, সেই বিষয়ে) এর মতো একটি সিঙ্গলটন সম্পূর্ণ অপ্রয়োজনীয়।

মডিউলগুলি ক্যাশেড এবং স্টেটফুল হওয়ায় আপনার সরবরাহিত লিঙ্কটিতে দেওয়া উদাহরণটি আরও সহজেই সহজেই আবার লেখা যেতে পারে:

var socketList = {};

exports.add = function (userId, socket) {
    if (!socketList[userId]) {
        socketList[userId] = socket;
    }
};

exports.remove = function (userId) {
    delete socketList[userId];
};

exports.getSocketList = function () {
    return socketList;
};
// or
// exports.socketList = socketList

5
দস্তাবেজগুলি বলছে " মডিউল কোডটি একাধিকবার মৃত্যুদন্ড কার্যকর করাতে পারে না " তাই এটি সম্ভবত একাধিকবার বলা হয়ে থাকে, এবং এই কোডটি আবার কার্যকর করা হলে সকেটলিস্টটি খালি তালিকায় পুনরায় সেট করা হবে
জোনাথন।

4
@ জোনাথন এই উদ্ধৃতিটির চারপাশের ডক্সের প্রসঙ্গটি দেখে মনে হচ্ছে একটি সুন্দর দৃ conv়প্রত্যয়ী মামলা তৈরি করা যেতে পারে যা কোনও আরএফসি-স্টাইলে ব্যবহৃত হচ্ছে না
মাইকেল

6
@ মিশেল "মে" একটি মজার শব্দ। অভিনব একটি শব্দ থাকার যে
উপেক্ষিত

4
may notপ্রযোজ্য যখন আপনি npm linkউন্নয়ন সময় অন্যান্য মডিউল। সুতরাং ইভেন্টবসের মতো একক দৃষ্টিতে নির্ভর করে এমন মডিউলগুলি ব্যবহার করার সময় সতর্কতা অবলম্বন করুন।
মিডিয়াফ্রিচ

10

জেএসে একটি সিঙ্গলটন করার জন্য আপনার বিশেষ কিছু দরকার নেই, নিবন্ধের কোডটিও হতে পারে:

var socketList = {};

module.exports = {
      add: function() {

      },

      ...
};

নোড.জেএস এর বাইরে (উদাহরণস্বরূপ, ব্রাউজার জেএসে), আপনাকে ম্যানুয়ালি মোড়ক ফাংশন যুক্ত করতে হবে (এটি স্বয়ংক্রিয়ভাবে নোড.জেজে সম্পন্ন হবে):

var singleton = function() {
    var socketList = {};
    return {
        add: function() {},
        ...
    };
}();

@ অ্যালেন লুসের নির্দেশ অনুসারে, যদি নোডের ক্যাচিং ব্যর্থ হয় তবে সিঙ্গলটন প্যাটার্নটিও ব্যর্থ হয়।
রাকীন

10

এখানে একমাত্র উত্তর যা ES6 ক্লাস ব্যবহার করে

// SummaryModule.js
class Summary {

  init(summary) {
    this.summary = summary
  }

  anotherMethod() {
    // do something
  }
}

module.exports = new Summary()

এই সিঙ্গলটন এর সাথে প্রয়োজন:

const summary = require('./SummaryModule')
summary.init(true)
summary.anotherMethod()

এখানে কেবল সমস্যাটি হ'ল আপনি ক্লাস কনস্ট্রাক্টরের কাছে প্যারামগুলি পাস করতে পারবেন না তবে ম্যানুয়ালি কোনও initপদ্ধতিতে কল করে তা নিষ্ক্রিয় করা যেতে পারে ।


প্রশ্নটি হ'ল "কি সিঙ্গেলন দরকার", "আপনি কীভাবে লিখবেন না"
mkoryak

@ danday74 আমরা summaryআবার অন্য কোনও ক্লাসে কীভাবে একই উদাহরণ ব্যবহার করতে পারি , তা আবার শুরু না করেই?
এম ফয়সাল হামেদ

4
নোড.জেসগুলিতে কেবল এটি অন্য একটি ফাইলের মধ্যে প্রয়োজন ... কনসট্যান্ট সংক্ষিপ্তকরণ = প্রয়োজনীয় ('./ সংক্ষিপ্ত বিবরণ') ... এবং এটি একই ঘটনা হবে। আপনি এটির সদস্য ভেরিয়েবল তৈরি করে এবং এটির প্রয়োজন হয় এমন একটি ফাইলে এর মান সেট করে এবং তারপরে এটির প্রয়োজন হয় এমন অন্য কোনও ফাইলে তার মান পেয়ে পরীক্ষা করতে পারেন can এটি নির্ধারিত মান হওয়া উচিত।
danday74

6

সিলেটলেটগুলি জেএসে ঠিক আছে, তাদের কেবল এত ভার্বোস হওয়ার দরকার নেই।

নোডে আপনার যদি একটি সিঙ্গলটন প্রয়োজন হয়, উদাহরণস্বরূপ আপনার সার্ভার স্তরের বিভিন্ন ফাইলগুলিতে একই ORM / DB উদাহরণটি ব্যবহার করার জন্য, আপনি বিশ্বব্যাপী পরিবর্তনশীল হিসাবে রেফারেন্সটি স্টাফ করতে পারেন।

কেবল এমন একটি মডিউল লিখুন যা বিশ্বব্যাপী তৈরি করে যদি এটি বিদ্যমান না থাকে তবে তার একটি রেফারেন্স প্রদান করে।

@ অ্যালেন-লুস তার পাদটীকা কোড উদাহরণ সহ এখানে অনুলিপি করেছেন:

singleton.getInstance = function(){
  if(global.singleton_instance === undefined)
    global.singleton_instance = new singleton();
  return global.singleton_instance;
};

module.exports = singleton.getInstance();

কিন্তু এটা খেয়াল করা জরুরী যে ব্যবহার গুরুত্বপূর্ণ newশব্দ হয় না প্রয়োজন। যে কোনও পুরানো অবজেক্ট, ফাংশন, আইআইএফ ইত্যাদি কাজ করবে - এখানে কোনও ওওপি ভুডু হচ্ছে না।

বোনাস পয়েন্টগুলি যদি আপনি কোনও ফাংশনের অভ্যন্তরে কিছু আপত্তি বন্ধ করে দেন যা এটির একটি রেফারেন্স দেয় এবং সেই ফাংশনটিকে বিশ্বব্যাপী করে তোলে - তবে বৈশ্বিক পরিবর্তনশীলটির পুনরায় নিযুক্তকরণ এটি থেকে ইতিমধ্যে তৈরি করা দৃষ্টান্তগুলিকে আঁকড়ে ধরবে না - যদিও এটি সন্দেহজনকভাবে কার্যকর।


আপনার এর কোনও দরকার নেই। আপনি কেবল এটি করতে পারেন module.exports = new Foo()কারণ মডিউল.এক্সপোর্টগুলি আবার কার্যকর হবে না, যদি না আপনি সত্যিই বোকা কিছু করেন
ম্যাকোরিয়াক

আপনার একেবারে বাস্তবায়নের পার্শ্ব প্রতিক্রিয়াগুলির উপর নির্ভর করা উচিত নয়। যদি আপনার একক উদাহরণ প্রয়োজন হয় তবে প্রয়োগটি পরিবর্তনের ক্ষেত্রে এটি কেবল একটি বিশ্বব্যাপী সাথে বেঁধে রাখুন।
অ্যাডাম টলি

উপরের উত্তরটি মূল প্রশ্নের ভুল বোঝাবুঝি হিসাবে ছিল যে, 'আমি কি জেএসে সিলেটলেট ব্যবহার করব নাকি ভাষা এগুলি অপ্রয়োজনীয় করে তোলে?', যা অন্যান্য উত্তরগুলির অনেকটা একটি সমস্যা বলে মনে হয়। যথাযথ, সুস্পষ্ট একক বাস্তবায়নের প্রতিস্থাপন হিসাবে প্রয়োজনীয় প্রয়োগটি ব্যবহারের বিরুদ্ধে আমি আমার সুপারিশের পাশে আছি।
অ্যাডাম টলি

1

এটি সহজ রাখা।

foo.js

function foo() {

  bar: {
    doSomething: function(arg, callback) {
      return callback('Echo ' + arg);
    };
  }

  return bar;
};

module.exports = foo();

তারপর ঠিক

var foo = require(__dirname + 'foo');
foo.doSomething('Hello', function(result){ console.log(result); });

প্রশ্নটি হল "সিঙ্গেলনগুলি দরকার", "আপনি কীভাবে লিখবেন না"
mkoryak
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.