node.js - Async इंतजार कार्यों से Bluebird वादा प्राप्त करें



promise async-await (1)

मैं एक तरह से, नोड v7.6 या इसके बाद के संस्करण के साथ एक ब्लूबर्ड वादा (या कोई गैर-मूल वादा) प्राप्त करने के लिए देख रहा हूं जब एक एसिंक फ़ंक्शन कहा जाता है।

उसी तरह मैं कर सकता हूँ:

global.Promise = require('Bluebird'); // Or Q/When
var getResolvedPromise = () => Promise.resolve('value');

getResolvedPromise
  .tap(...) // Bluebird method
  .then(...);

देखें: मैं वैश्विक उपयोग कर सकता हूं। प्रोमोसेज़ = की आवश्यकता है ("ब्लूबर्ड")

मैं कुछ ऐसा करने में सक्षम होना चाहता हूं:

global.Promise = require('Bluebird'); // Or Q/When
var getResolvedAsyncAwaitPromise = async () => 'value';

getResolvedAsyncAwaitPromise()
  .tap(...) // Error ! Native Promises does not have `.tap(...)`
  .then(...);

मुझे पता है कि मैं किसी भी समय कुछ का उपयोग कर सकता हूं:

Bluebird.resolve(getResolvedAsyncAwaitPromise())
  .tap(...);

लेकिन मैं उत्सुक था कि अगर AsyncFunction द्वारा AsyncFunction गए डिफ़ॉल्ट वादे को बदलने का एक तरीका हो। कन्स्ट्रक्टर संलग्न दिखता है:

ध्यान दें कि AsyncFunction एक वैश्विक ऑब्जेक्ट नहीं है। यह निम्नलिखित कोड का मूल्यांकन करके प्राप्त किया जा सकता है।

Object.getPrototypeOf(async function(){}).constructor

AsyncFunction पर AsyncFunction संदर्भ

यदि AsyncFunction के वादा निर्माता को बदलने का कोई तरीका नहीं है, तो मैं इस लॉकिंग के कारणों को जानना चाहता हूं।

धन्यवाद !


क्या ऐन्किंक फंक्शंस द्वारा दिए गए डिफ़ॉल्ट वादे को बदलने का एक तरीका है

नहीं।

इस लॉकिंग के कारण क्या हैं

सभी async function को अपहृत करने की क्षमता एक सुरक्षा समस्या हो सकती है। इसके अलावा, यहां तक ​​कि जहां कोई समस्या नहीं है, फिर भी यह विश्व स्तर पर प्रतिस्थापन के लिए उपयोगी नहीं है। यह आपके संपूर्ण क्षेत्र को प्रभावित करेगा, जिसमें आप उपयोग कर रहे सभी लाइब्रेरी भी शामिल होंगे। वे देशी वादों का उपयोग करने पर भरोसा कर सकते हैं और आप दो अलग-अलग वादा पुस्तकालयों का उपयोग नहीं कर सकते हैं, यद्यपि उनकी आवश्यकता हो सकती है।

मैं कुछ ऐसा करने में सक्षम होना चाहता हूं:

getResolvedAsyncAwaitPromise().tap(...)

आप क्या कर सकते हैं Promise.method साथ अपनी परिभाषा में कार्य को लपेटते हैं। Promise.method :

const Bluebird = require('Bluebird');
const getResolvedAsyncAwaitPromise = Bluebird.method(async () => 'value');

getResolvedAsyncAwaitPromise()
.tap(…) // Works!
.then(…);




es6-promise