2014-06-19 3 views
6

मुझे उस कार्यवाही को रद्द करने के लिए उपयोगकर्ता के मामले को संभालने के लिए अपने शरीर के बाहर से एक वादे को अस्वीकार करने की आवश्यकता है।अपने शरीर के बाहर से एक वादा को अस्वीकार करना/हल करना

यहां, मुझे प्रत्येक कतारबद्ध अपलोड पर #start कॉल करके, एक ही समय में कई अपलोड शुरू करने की आवश्यकता है। वह वर्ग जो अपलोड कतार का प्रबंधन करता है, फिर सभी वादों को संग्रहीत करता है और Ember.RSVP.all का उपयोग करता है ताकि सभी वादे हल हो जाएं या किसी ने खारिज कर दिया हो। यह ठीक काम करता है।

अब, मैं अपलोड

App.Upload = Ember.Object.extend({ 
    start: function() { 
    var self = this; 

    return new Ember.RSVP.Promise(function(resolve, reject) { 
     self.startUpload() // Async upload with jQuery 
     .then(
      function(resp) { resolve(resp) }, 
      function(error) { reject(error) } 
     ); 
    }); 
    }, 

    cancel: function() { 
    this.get('currentUpload').cancel() // Works, and cancels the upload 
    // Would like to reject the promise here 
    }, 

    startUpload: function() { 
    return this.set('currentUpload', /* some jqXHR that i build to upload */) 
    } 
}); 

मैं इसे संभाल के लिए कई तरीके के बारे में सोचा है, लेकिन मैं myPromise.reject(reason) की तरह कोई भी तरीका नहीं मिला है रद्द करना चाहते हैं।

App.Upload = Ember.Object.extend({ 
    start: function() { 
    var self = this; 

    return new Ember.RSVP.Promise(function(resolve, reject) { 
     /* Store it here */ 
     self.set('rejectUpload', reject); 
     /* ------------- */ 

     self.startUpload() // Async upload with jQuery 
     .then(
      function(resp) { resolve(resp) }, 
      function(error) { reject(error) } 
     ); 
    }); 
    }, 

    cancel: function() { 
    this.get('currentUpload').cancel() // Works, and cancels the upload 

    /* Reject the promise here */ 
    var reject; 
    if (reject = this.get('rejectUpload')) reject(); 
    /* ----------------------- */ 
    }, 

    startUpload: function() { 
    return this.set('currentUpload', /* some jqXHR that i build to upload */) 
    } 
}); 

यह ध्वनि थोड़ा मेरे लिए गंदा है, और मैं चाहता हूँ:

तो मैं क्या किया, इस तरह, Upload उदाहरण में reject समारोह की दुकान है और यह मेरी cancel विधि से कॉल करने के लिए है यह जानने के लिए कि क्या इसे बनाने का एक बेहतर तरीका था।

आपके समय के लिए धन्यवाद!

+0

वादा एक्सेस करने के लिए तुम क्यों वादा निर्माता के साथ startUpload' लपेटकर रहे हैं '? –

+0

रुको, नहीं - यह तर्कसंगत रूप से गलत है (आप यहां क्या कर रहे हैं), आप साइड इफेक्ट्स को रोकने के लिए केवल एक बार हल करते हैं और वास्तव में अपलोड को रद्द नहीं करते हैं। मैं अनुशंसा करता हूं कि आप एक वादा लाइब्रेरी का उपयोग करें जो ब्लूबर्ड जैसे रद्दीकरण का समर्थन करता है। –

उत्तर

7
var deferred = Ember.RSVP.defer(); 

deferred.resolve("Success!"); 
deferred.reject("End of the world"); 

(आदि thening के लिए)

deferred.promise.then(function(){ 
    console.log('all good'); 
},function(){ 
    console.log('all bad'); 
}); 
+0

जवाब देने के लिए क्षमा करें और आपके सुझाव के लिए धन्यवाद। जैसे ही मैंने सोमवार को इसका परीक्षण किया है, मैं इसे स्वीकार करूंगा! – Vala

संबंधित मुद्दे