javascript - ब्लूबर्ड वादा बाइन चेन



node.js promise (1)

मैं वादों के लिए Bluebird का उपयोग कर रहा हूं और चेन कॉलिंग का उपयोग करने की कोशिश कर रहा हूं, लेकिन .bind () का उपयोग करने के लिए काम नहीं लगता। मैं समझ रहा हूं:

TypeError: sample.testFirst (...) testSecond फ़ंक्शन नहीं है

पहली विधि को सही कहा जाता है और वादा चेन शुरू होता है लेकिन मैं इस पर सभी को काम करने के लिए बाध्यकारी उदाहरण प्राप्त करने में सक्षम रहा हूं।

यह मेरा परीक्षण कोड है:

var Promise = require('bluebird');

SampleObject = function()
{
  this._ready = this.ready();
};

SampleObject.prototype.ready = function()
{
  return new Promise(function(resolve)
  {
    resolve();
  }).bind(this);
}

SampleObject.prototype.testFirst = function()
{
  return this._ready.then(function()
  {
    console.log('test_first');
  });
}

SampleObject.prototype.testSecond = function()
{
  return this._ready.then(function()
  {
    console.log('test_second');
  });
}

var sample = new SampleObject();
sample.testFirst().testSecond().then(function()
{
  console.log('done');
});

मैं नवीनतम ब्लूबिर्ड का उपयोग कर रहा हूं:

npm इंस्टॉल --save bluebird

क्या मैं यह गलत आ रहा हूं? किसी भी सहायता के लिए धन्यवाद। धन्यवाद।


यह उस त्रुटि को फेंक रहा है क्योंकि, testSecond पद्धति का कोई testSecond नहीं है testSecond पर testFirst , यदि आप testFirst दोनों हल किए जाने के बाद कुछ करना चाहते हैं, तो इसे नीचे करें:

var sample = new SampleObject();

Promise.join(sample.testFirst(), sample.testSecond()).spread(function (testFirst, testSecond){
  // Here testFirst is returned by resolving the promise created by `sample.testFirst` and 
  // testSecond is returned by resolving the promise created by `sample.testSecond`
});

यदि आप देखना चाहते हैं कि दोनों को ठीक से हल किया गया है, तो testFirst करने की बजाय, testFirst और testSecond फ़ंक्शंस में स्ट्रिंग testFirst और उन्हें नीचे दिखाए गए अनुसार spread कॉलबैक में लॉग करें:

SampleObject.prototype.testFirst = function()
{
  return this._ready.then(function()
  {
    return 'test_first';
  });
}

SampleObject.prototype.testSecond = function()
{
  return this._ready.then(function()
  {
    return 'test_second';
  });
}

अब, नीचे दिखाए गए अनुसार spread कॉलबैक में console.log कर रहे हैं, ऊपर दिए गए वादे से लौटा दिए तारों को लॉग करेंगे:

Promise.join(sample.testFirst(), sample.testSecond()).spread(function(first, second){
  console.log(first); // test_first
  console.log(second); // test_second
});




chain