কোনও বস্তু যদি প্রতিশ্রুতি দেয় তবে আমি কীভাবে বলব?


335

এটি কোনও ES6 প্রতিশ্রুতি বা ব্লুবার্ড প্রতিশ্রুতি, কিউ প্রতিশ্রুতি ইত্যাদি Whether

প্রদত্ত বস্তুটি প্রতিশ্রুতিবদ্ধ কিনা তা আমি কীভাবে পরীক্ষা করব?


3
সর্বোপরি আপনি কোনও .thenপদ্ধতির জন্য পরীক্ষা করতে পারেন , তবে এটি আপনাকে বলবে না যে আপনার কাছে যা আছে তা অবশ্যই প্রতিশ্রুতিবদ্ধ। এই মুহুর্তে আপনি কেবলমাত্র জানবেন যে আপনার কাছে এমন কিছু আছে যা একটি প্রতিশ্রুতির মতো একটি .thenপদ্ধতি প্রকাশ করে ।
স্কট

@ স্কটঅফেন প্রতিশ্রুতির স্পেসিফিকেশন স্পষ্টভাবে কোনও পার্থক্য রাখে না।
বেনিয়ামিন গ্রুইনবাউম

6
আমার বক্তব্যটি হ'ল যে কেউ এমন একটি বস্তু তৈরি করতে পারে যা এমন একটি .thenপদ্ধতি প্রকাশ করে যা কোনও প্রতিশ্রুতি নয়, প্রতিশ্রুতির মতো আচরণ করে না এবং প্রতিশ্রুতির মতো ব্যবহার করার কোনও ইচ্ছা ছিল না। একটি জন্য চেক করা হচ্ছে .thenপদ্ধতি শুধু আপনার বলে যে যদি বস্তুর নেই একটি আছে .thenপদ্ধতি, তাহলে আপনি না একটি প্রতিশ্রুতি আছে। বিপরীত - একটি অস্তিত্ব .thenপদ্ধতি মানে আপনি কি একটি প্রতিশ্রুতি আছে - অগত্যা সত্য নয়।
স্কট অফনে

3
@ স্কটঅফেন সংজ্ঞা অনুসারে, প্রতিশ্রুতি চিহ্নিত করার একমাত্র প্রতিষ্ঠিত উপায় হ'ল এটির কোনও .thenপদ্ধতি আছে কিনা তা পরীক্ষা করা । হ্যাঁ, এটিতে মিথ্যা ধনাত্মক হওয়ার সম্ভাবনা রয়েছে তবে সমস্ত অনুগ্রহযোগ্য গ্রন্থাগারগুলিতে নির্ভর করার বিষয়টি ধারণা (কারণ এগুলিই তারা নির্ভর করতে পারে )। আমি যতদূর দেখতে পাচ্ছি তার একমাত্র বিকল্প হ'ল বেঞ্জামিন গ্রুইনবাউমের পরামর্শ নেওয়া এবং এটি প্রতিশ্রুতি পরীক্ষার স্যুট দিয়ে চালানো। তবে এটি প্রকৃত উত্পাদন কোডের জন্য ব্যবহারিক নয়।
JLRishe

উত্তর:


342

একটি প্রতিশ্রুতি গ্রন্থাগার কীভাবে সিদ্ধান্ত নেয়

যদি এটির কোনও .thenফাংশন থাকে - এটি কেবলমাত্র মান প্রতিশ্রুতি গ্রন্থাগারগুলি ব্যবহার করে।

প্রতিশ্রুতি / এ + নির্দিষ্টকরণের thenসক্ষম হিসাবে একটি ধারণা রয়েছে যা মূলত "একটি thenপদ্ধতির সাথে একটি বস্তু "। প্রতিশ্রুতি দেয় এবং তত্ক্ষণিক পদ্ধতিতে কোনও কিছুকেই একীভূত করা উচিত । আপনি যে প্রতিশ্রুতি বাস্তবায়নের কথা বলেছেন তার সবই এটি করে।

যদি আমরা স্পেসিফিকেশন তাকান :

২.৩.৩.৩ যদি thenকোনও ফাংশন হয় তবে এটিকে এক্স হিসাবে এটি কল করুন, প্রথম যুক্তির সমাধান সমাধান করুন, এবং দ্বিতীয় যুক্তি প্রত্যাখ্যান করুন

এটি এই নকশার সিদ্ধান্তের যুক্তিও ব্যাখ্যা করে:

thenসক্ষমদের এই চিকিত্সা প্রতিশ্রুতি বাস্তবায়নকে আন্তঃকণ্ঠিত করার অনুমতি দেয়, যতক্ষণ না তারা প্রতিশ্রুতি / এ + -কম্পিয়েন্ট thenপদ্ধতি প্রকাশ করে। এটি প্রতিশ্রুতিবদ্ধ / এ + বাস্তবায়নকে যুক্তিসঙ্গত তারপর পদ্ধতিগুলির সাথে নন-কনফর্মেন্ট বাস্তবায়নগুলিকে "একীকরণ" করতে সহায়তা করে।

আপনার কীভাবে সিদ্ধান্ত নেওয়া উচিত

আপনার উচিত হবে না - পরিবর্তে Promise.resolve(x)( Q(x)প্রশ্নে) কল করা উচিত যা সর্বদা কোনও মান বা বাহ্যিক thenসক্ষমকে বিশ্বস্ত প্রতিশ্রুতিতে রূপান্তরিত করে । এই চেকগুলি নিজে সম্পাদন করার চেয়ে এটি নিরাপদ এবং সহজ।

সত্যিই নিশ্চিত হওয়া দরকার?

আপনি এটি সর্বদা পরীক্ষার স্যুট দিয়ে চালাতে পারেন : ডি


168

কিছু প্রতিশ্রুতি দেওয়া হচ্ছে কিনা তা পরীক্ষা করা কোডটিকে অযথা জটিল করে তুলেছে, কেবল ব্যবহার করুন Promise.resolve

Promise.resolve(valueOrPromiseItDoesntMatter).then(function(value) {

})

1
সুতরাং প্রতিশ্রুতি.আরলভস যেভাবে আসে তার কিছু পরিচালনা করতে পারে ? অবশ্যই কিছু না, তবে আমি যুক্তিসঙ্গত কিছু অনুমান করি?
আলেকজান্ডার মিলস

3
@ অ্যালেক্সমিলস হ্যাঁ, এটি এমনকি jQuery প্রতিশ্রুতির মতো মানহীন প্রতিশ্রুতিগুলির জন্যও কাজ করে। এটি ব্যর্থ হতে পারে যদি বস্তুর যদি তত্কালীন পদ্ধতি থাকে তবে প্রতিশ্রুতি থেকে সম্পূর্ণ আলাদা ইন্টারফেস থাকে।
ইসাইলিজা

19
এই উত্তর, যদিও সম্ভবত ভাল পরামর্শ, আসলে প্রশ্নের উত্তর দেয় না।
স্টিজন ডি উইট

4
প্রশ্নটি আসলে কেউ প্রতিশ্রুতি গ্রন্থাগার বাস্তবায়নের বিষয়ে না হলে প্রশ্নটি অবৈধ। কেবল একটি প্রতিশ্রুতি পাঠাগারটিতে চেক করা দরকার, এর পরে আপনি সর্বদা এর। সমাধান পদ্ধতিটি আমি যেমন দেখিয়েছি তা ব্যবহার করতে পারেন।
ইসাইলিজা

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

103

এখানে আমার আসল উত্তরটি দেওয়া হয়েছে, যেহেতু একটি প্রতিশ্রুতির জন্য পরীক্ষার উপায় হিসাবে অনুমিতিতে এটি অনুমোদিত হয়েছে :

Promise.resolve(obj) == obj

এটি কাজ করে কারণ অ্যালগরিদম স্পষ্টতই দাবি করে যে Promise.resolveঅবশ্যই যদি সঠিক নকশাকে সংজ্ঞায়িত সংজ্ঞা দ্বারা প্রদত্ত প্রতিশ্রুতি দেয় তবে অবশ্যই পাঠানো উচিত ।

আমার এখানে আরও একটি উত্তর আছে, যা এটি বলত, তবে আমি সাফারির সাথে সেসময় কাজ না করলে আমি এটিকে অন্য কিছুতে পরিবর্তন করেছি। এটি এক বছর আগে ছিল এবং এটি এখন সাফারিতেও নির্ভরযোগ্যভাবে কাজ করে।

আমি আমার আসল উত্তরটি সম্পাদনা করতে পারতাম, যদি এটি ভুল মনে না হয় তবে এখনই আরও বেশি লোকেরা উত্তরটির পরিবর্তে পরিবর্তিত সমাধানের পক্ষে মত দিয়েছেন। আমি বিশ্বাস করি এটি সর্বোত্তম উত্তর, এবং আমি আশা করি আপনি তাতে সম্মত হবেন।


10
আপনি ===পরিবর্তে ব্যবহার করা উচিত ==?
নিল এস

12
এটি একই প্রতিশ্রুতিগুলির ক্ষেত্রেও ব্যর্থ হবে।
বেনজামিন গ্রুইনবাউম

4
"স্পেকের সংজ্ঞা অনুসারে একটি প্রতিশ্রুতি" এর অর্থ মনে হয় "একই নির্মাণকারীর দ্বারা প্রতিশ্রুতি হিসাবে প্রতিশ্রুতি হিসাবে তৈরি প্রতিশ্রুতি। রিসার্ভ () হবে" - সুতরাং এটি সনাক্ত করতে ব্যর্থ হবে যেমন উদাহরণস্বরূপ। একটি পলিফিল্ড প্রতিশ্রুতি আসলে একটি প্রতিশ্রুতি
ভক্সপেলি

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

1
এই পদ্ধতিটি ব্যবহার করবেন না, কেন এখানে, আরও @ বেনজামিন গ্রুয়েনবাউমের বক্তব্য। gist.github.com/reggi/a1da4d0ea4f1320fa15405fb86358cff
টমাসরেগি

61

আপডেট: এটি আর সেরা উত্তর নেই। পরিবর্তে আমার অন্য উত্তরটি দয়া করে ভোট দিন ।

obj instanceof Promise

এটা করা উচিত। নোট করুন যে এটি কেবল দেশীয় এস 6 প্রতিশ্রুতি দিয়ে নির্ভরযোগ্যভাবে কাজ করতে পারে।

আপনি যদি শিম, প্রতিশ্রুতি গ্রন্থাগার বা প্রতিশ্রুতির মতো ভান করার মতো অন্য কোনও কিছু ব্যবহার করে .thenথাকেন তবে অন্য উত্তরগুলিতে এখানে যেমন দেখানো হয়েছে তেমনই "তদন্তযোগ্য" (কোনও পদ্ধতির কোনও কিছু ) জন্য পরীক্ষা করা আরও উপযুক্ত হতে পারে ।


এর পর থেকে আমার দিকে ইঙ্গিত করা হয়েছে যে Promise.resolve(obj) == objসাফারিতে কাজ করবে না। instanceof Promiseপরিবর্তে ব্যবহার করুন।
jib

2
এটি নির্ভরযোগ্যভাবে কাজ করে না এবং আমার ট্র্যাক সমস্যার জন্য অত্যন্ত উত্কৃষ্ট হয়ে পড়ে। বলুন আপনার কাছে এমন একটি লাইব্রেরি রয়েছে যা es6. প্রমিস শিম ব্যবহার করে এবং আপনি ব্লুবার্ড কোথাও ব্যবহার করেন, আপনার সমস্যা হবে। এই সমস্যাটি ক্রোম ক্যানারিটিতে আমার কাছে এসেছিল।
ভন

1
হ্যাঁ, এই উত্তরটি আসলে ভুল। সমস্যাটি ট্র্যাক করার জন্য আমি ঠিক এখানে এসেছি। obj && typeof obj.then == 'function'পরিবর্তে আপনার সত্যই পরীক্ষা করা উচিত , কারণ এটি সমস্ত ধরণের প্রতিশ্রুতি নিয়ে কাজ করবে এবং এটি বাস্তবে সুপারিশ দ্বারা প্রস্তাবিত এবং বাস্তবায়ন / পলফিল দ্বারা ব্যবহৃত উপায়। Promise.allউদাহরণস্বরূপ নেটিভ thenকেবল সমস্ত দেশীয় প্রতিশ্রুতি নয়, সমস্ত সক্ষম হয়ে কাজ করবে । সুতরাং আপনার কোড করা উচিত। সুতরাং instanceof Promiseএকটি ভাল সমাধান নয়।
স্টিজন ডি উইট

2
ফলোআপ - এটা খারাপ: চালু শুধুমাত্র নেটিভ প্রতিশ্রুতি আমি এই মুহূর্তে একটি সমস্যা যেখানে ডিবাগ করার চেষ্টা করছি ব্যবহার 6.2.2 Node.js console.log(typeof p, p, p instanceof Promise);এই আউটপুট উত্পাদন করে: object Promise { <pending> } false। আপনি দেখতে পাচ্ছেন এটি ঠিক একটি প্রতিশ্রুতি - এবং তবুও instanceof Promiseপরীক্ষার ফেরত দেয় false?
মারে

2
এটি সেই প্রতিশ্রুতিগুলির জন্য ব্যর্থ হবে যা একই রাজ্যের নয়।
বেনজামিন গ্রুইনবাউম

46
if (typeof thing.then === 'function') {
    // probably a promise
} else {
    // definitely not a promise
}

6
জিনিস যদি অপরিজ্ঞাত হয়? আপনার কাছে জিনিসটি && এর মাধ্যমে রক্ষা করা দরকার
mrBorna

সেরা না তবে অবশ্যই খুব সম্ভবত; সমস্যার ক্ষেত্রের উপরও নির্ভর করে। প্রতিরক্ষামূলকভাবে 100% রচনা লেখা খোলা সমাপ্ত পাবলিক এপিআইগুলিতে সাধারণত প্রযোজ্য বা যেখানে আপনি জানেন ডেটার আকার / স্বাক্ষরটি সম্পূর্ণ উন্মুক্ত is
rob2d

17

প্রদত্ত বস্তুটি কোনও ES6 প্রতিশ্রুতি কিনা তা দেখতে , আমরা এই প্রাকটিকাকে ব্যবহার করতে পারি:

function isPromise(p) {
  return p && Object.prototype.toString.call(p) === "[object Promise]";
}

Calling toStringথেকে সরাসরি Object.prototypeএকটি আয় নেটিভ স্ট্রিং উপস্থাপনা দেওয়া অবজেক্ট প্রকারটি যা এর "[object Promise]"আমাদের ক্ষেত্রে। এটি প্রদত্ত বস্তুকে নিশ্চিত করে

  • বাইপাসগুলি মিথ্যা ধনাত্মক যেমন ..:
    • একই নির্মাতার নামের ("প্রতিশ্রুতি") সহ স্ব-সংজ্ঞায়িত অবজেক্টের ধরণ।
    • toStringপ্রদত্ত বস্তুর স্ব-লিখিত পদ্ধতি।
  • একাধিক পরিবেশ প্রেক্ষিতে জুড়ে কাজ (যেমন অনুরোধকে) বিপরীতেinstanceof বা isPrototypeOf

তবে, কোনও নির্দিষ্ট হোস্ট অবজেক্ট , তার ট্যাগের মাধ্যমেSymbol.toStringTag এটি সংশোধিত আছে , ফিরে আসতে পারে "[object Promise]"। প্রকল্পের উপর নির্ভর করে এটি উদ্দেশ্যযুক্ত ফলাফল হতে পারে (যেমন যদি কোনও কাস্টম প্রতিশ্রুতি বাস্তবায়ন থাকে)।


অবজেক্টটি কোনও স্থানীয় ES6 প্রতিশ্রুতি থেকে এসেছে কিনা তা দেখতে , আমরা ব্যবহার করতে পারি:

function isNativePromise(p) {
  return p && typeof p.constructor === "function"
    && Function.prototype.toString.call(p.constructor).replace(/\(.*\)/, "()")
    === Function.prototype.toString.call(/*native object*/Function)
      .replace("Function", "Promise") // replacing Identifier
      .replace(/\(.*\)/, "()"); // removing possible FormalParameterList 
}

এই এবং অনুমানের এই বিভাগ অনুসারে , ফাংশনের স্ট্রিং প্রতিনিধিত্ব হওয়া উচিত:

"ফাংশন আইডেন্টিফাইয়ার ( FormalParameterList অপ্ট ) { FunctionBody }"

যা উপরোক্ত অনুসারে পরিচালিত হয়। FunctionBody হয় [native code]সমস্ত প্রধান ব্রাউজারে।

MDN: Function.prototype.toString

এটি একাধিক পরিবেশ প্রসঙ্গেও কাজ করে।


12

সম্পূর্ণ প্রশ্নের উত্তর নয় তবে আমি মনে করি এটি উল্লেখ করা উচিত যে নোড.জেএস 10-তে একটি নতুন ইউজার ফাংশন isPromiseযুক্ত হয়েছিল যা কোনও বস্তুটি দেশীয় প্রতিশ্রুতিবদ্ধ কিনা তা পরীক্ষা করে:

const utilTypes = require('util').types
const b_Promise = require('bluebird')

utilTypes.isPromise(Promise.resolve(5)) // true
utilTypes.isPromise(b_Promise.resolve(5)) // false

11

এই হল কিভাবে graphql-JS প্যাকেজ প্রতিশ্রুতি সনাক্ত করে:

function isPromise(value) {
  return Boolean(value && typeof value.then === 'function');
}

valueআপনার ফাংশনের প্রত্যাবর্তিত মান। আমি আমার প্রকল্পে এই কোডটি ব্যবহার করছি এবং এখন পর্যন্ত কোনও সমস্যা নেই।


6

এখানে কোড ফর্মটি https://github.com/ssnau/xkit/blob/master/util/is-promise.js

!!obj && (typeof obj === 'object' || typeof obj === 'function') && typeof obj.then === 'function';

যদি কোনও thenপদ্ধতির সাথে কোনও অবজেক্ট থাকে তবে এটি হিসাবে ব্যবহার করা উচিত Promise


3
আমাদের কেন প্রয়োজন === 'ফাংশন' শর্ত বিটিডব্লিউ?
অ্যালেডরফ

এই উত্তর হিসাবে একই , যে কোনও বস্তুর "তখন" একটি পদ্ধতি থাকতে পারে এবং তাই সর্বদা একটি প্রতিশ্রুতি হিসাবে গণ্য করা যায় না।
বোঘইন হফম্যান

6

আপনি টাইপস্রিপ্ট ব্যবহার করছেন এমন ক্ষেত্রে আমি যুক্ত করতে চাই যে আপনি "টাইপ প্রিকিকেট" বৈশিষ্ট্যটি ব্যবহার করতে পারেন। কেবলমাত্র এমন কোনও ফাংশনে যৌক্তিক যাচাইকরণ মোড়ানো উচিত যা x is Promise<any>আপনাকে ফিরে আসে এবং আপনাকে টাইপকাস্টগুলি করার প্রয়োজন হবে না। আমার উদাহরণের নীচে, cহয় প্রতিশ্রুতি বা আমার ধরণের একটি যা আমি c.fetch()পদ্ধতিটি কল করে একটি প্রতিশ্রুতিতে রূপান্তর করতে চাই ।

export function toPromise(c: Container<any> | Promise<any>): Promise<any> {
    if (c == null) return Promise.resolve();
    return isContainer(c) ? c.fetch() : c;
}

export function isContainer(val: Container<any> | Promise<any>): val is Container<any> {
    return val && (<Container<any>>val).fetch !== undefined;
}

export function isPromise(val: Container<any> | Promise<any>): val is Promise<any> {
    return val && (<Promise<any>>val).then !== undefined;
}

আরও তথ্য: https://www.typescriptlang.org/docs/handbook/advanced-tyype.html


6

আপনি যদি একটি অ্যাসিঙ্ক পদ্ধতিতে থাকেন তবে আপনি এটি করতে পারেন এবং কোনও অস্পষ্টতা এড়াতে পারেন।

async myMethod(promiseOrNot){
  const theValue = await promiseOrNot()
}

যদি ফাংশন প্রতিশ্রুতি দেয় তবে এটি অপেক্ষা করবে এবং সমাধান করা মানটি নিয়ে ফিরে আসবে। যদি ফাংশনটি কোনও মান দেয়, তবে এটি সমাধান হিসাবে বিবেচিত হবে।

যদি ফাংশনটি আজ কোনও প্রতিশ্রুতি দেয় না, তবে আগামীকাল কোনওটি প্রত্যাবর্তন করে বা অ্যাসিঙ্ক হিসাবে ঘোষণা করা হয়, আপনি ভবিষ্যতের প্রমাণ হবেন।


এটি এখানে অনুসারে কাজ করে : "যদি [প্রতীক্ষিত] মান কোনও প্রতিশ্রুতি না হয়, [প্রতীক্ষিত অভিব্যক্তি] মানটিকে একটি সমাধান প্রতিশ্রুতিতে রূপান্তর করে এবং তার জন্য অপেক্ষা করে"
pqnet

এটি মূলত যা এখানে গৃহীত উত্তরের পরিবর্তে Promise.resolve()
অ্যাসিঙ্ক

3
it('should return a promise', function() {
    var result = testedFunctionThatReturnsPromise();
    expect(result).toBeDefined();
    // 3 slightly different ways of verifying a promise
    expect(typeof result.then).toBe('function');
    expect(result instanceof Promise).toBe(true);
    expect(result).toBe(Promise.resolve(result));
});

2

আমি এই কার্যটি সর্বজনীন সমাধান হিসাবে ব্যবহার করি:

function isPromise(value) {
  return value && value.then && typeof value.then === 'function';
}

-1

অ্যাসিঙ্ক ফাংশনগুলি বা এমনকি প্রতিশ্রুতিগুলি সনাক্ত করার জন্য একটি নির্ভরযোগ্য উপায় অনুসন্ধান করার পরে , আমি নিম্নলিখিত পরীক্ষাটি ব্যবহার করে শেষ করেছি:

() => fn.constructor.name === 'Promise' || fn.constructor.name === 'AsyncFunction'

আপনি যদি সাবক্লাস করেন Promiseএবং এর উদাহরণ তৈরি করেন তবে এই পরীক্ষাটি ব্যর্থ হতে পারে। আপনি যদিও পরীক্ষার চেষ্টা করছেন তার বেশিরভাগের জন্য এটি কাজ করা উচিত।
থ্র্যাম

সম্মত, কিন্তু আমি দেখছি না যে কেউ কেন প্রতিশ্রুতির উপকেন্দ্র তৈরি করবে
সেবাস্তিয়ান এইচ।

fn.constructor.name === 'AsyncFunction'ভুল - এর অর্থ হ'ল কিছু একটি অ্যাসিঙ্ক ফাংশন এবং প্রতিশ্রুতি নয় - এছাড়াও এটির কাজ করার নিশ্চয়তা নেই কারণ লোকেরা প্রতিশ্রুতিগুলি সাবক্লাস করতে পারে
বেনজমিন গ্রুইনবাউম

@ বেনজামিন গ্রুয়েনবাউম উপরের উদাহরণটি বেশিরভাগ ক্ষেত্রেই কাজ করে, আপনি যদি নিজের সাবক্লাস তৈরি করেন তবে এর নামের সাথে পরীক্ষাগুলি যুক্ত করা উচিত
সেবাস্তিয়ান এইচ।

আপনি পারেন, তবে আপনি যদি ইতিমধ্যে জানেন যে সেখানে কী কী বস্তু রয়েছে আপনি যদি ইতিমধ্যে জানেন যে জিনিসগুলি প্রতিশ্রুতি দেওয়া হয় বা না হয়।
বেনিয়ামিন গ্রুইনবাউম

-3

ES6:

const promise = new Promise(resolve => resolve('olá'));

console.log(promise.toString().includes('Promise')); //true

2
যে কোনও অবজেক্টের (বা ওভাররাইট করা আছে) toStringপদ্ধতিটি কেবল একটি স্ট্রিং অন্তর্ভুক্ত করতে পারে যা এতে অন্তর্ভুক্ত রয়েছে "Promise"
বোঘইন হফম্যান

4
এই উত্তরটি অনেক কারণে খারাপ, সবচেয়ে সুস্পষ্ট সত্তা'NotAPromise'.toString().includes('Promise') === true
২২:০৫
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.