javascript मैं कोणीय के साथ ब्लूबर्ड का उपयोग कैसे करूं?




angularjs promise (2)

लाइब्रेरी कोणीय ब्लूबर्ड वादे bluebird साथ $q सेवा की जगह लेता है। $http भी ब्लूबर्ड के माध्यम से चलाते हैं

मैंने ब्लूबर्ड वादे के साथ कोणीय का उपयोग करने की कोशिश की:

HTML:

<body ng-app="HelloApp">
    <div ng-controller="HomeController">{{name}} {{also}}</div>
</body>

जे एस:

// javascript
var app = angular.module('HelloApp', []);

app.controller("HomeController", function ($scope) {
    var p = Promise.delay(1000).then(function () {
        $scope.name = "Bluebird!";
        console.log("Here!", $scope.name);
    }).then(function () {
        $scope.also = "Promises";
    });
    $scope.name = "$q";
    $scope.also = "promises";
});

window.app = app;

[ Fiddle ]

हालांकि, मैंने जो भी कोशिश की, इससे कोई फर्क नहीं पड़ता, यह "$q promises" और अद्यतन नहीं हुआ। सिवाय इसके कि मैंने मैन्युअल $scope.$apply जोड़ा है $scope.$apply जिसे मैं टालना चाहूंगा।

मैं AngularJS के साथ काम करने के लिए ब्लूबर्ड कैसे प्राप्त करूं?

(मुझे पता है कि यह संभव है क्योंकि $ q यह करता है)

मैं ब्लूबर्ड 2.0 का उपयोग कर रहा हूं जो मुझे here मिला।


यह संभव है, और यहां तक ​​कि काफी आसान है!

खैर, अगर हम देखते हैं कि $evalAsync के अपने वादे कैसे काम करते हैं , तो हमें वही व्यवहार प्राप्त करने के लिए ब्लूबर्ड को कहीं भी $evalAsync प्राप्त करने की आवश्यकता है।

यदि हम ऐसा करते हैं, तो तथ्य दोनों कार्यान्वयन Promises/A+ अनुपालन साधन हैं, हम $q कोड और ब्लूबर्ड कोड के बीच इंटरऑप कर सकते हैं, जिसका अर्थ है कि हम एंजुलर कोड में ब्लूबर्ड की सभी सुविधाओं का स्वतंत्र रूप से उपयोग कर सकते हैं।

Bluebird इसकी कार्यक्षमता का खुलासा करता है, इसकी Promise.setScheduler कार्यक्षमता के साथ:

// after this, all promises will cause digests like $q promises.
function trackDigests(app) {
    app.run(["$rootScope",function ($rootScope) {
        Promise.setScheduler(function (cb) {
            $rootScope.$evalAsync(cb);
        });
    }]);
}

अब हमें बस इतना करना है कि एक जोड़ें:

trackDigests(app); 

var app = ... लाइन के बाद लाइन, और सबकुछ अपेक्षित के रूप में काम करेगा। बोनस प्वाइंट्स के लिए, ब्लूबर्ड को एक सेवा में डालें ताकि आप इसे वैश्विक नामस्थान पर उपयोग करने के बजाय इंजेक्ट कर सकें।

यहां एक व्यवहार है जो इस व्यवहार को दर्शाता है।

ध्यान दें कि ब्लूबर्ड की सभी सुविधाओं के अलावा $q से अधिक है, एक और महत्वपूर्ण बात यह है कि ब्लूबर्ड $exceptionHandler नहीं चलाएगा, लेकिन इसके बजाय अनचाहे रिजेक्शन को स्वचालित रूप से ट्रैक कर देगा, ताकि आप ब्लूबर्ड के वादे के साथ स्वतंत्र रूप से throw सकें और ब्लूबर्ड उन्हें समझ लेंगे। इसके अलावा Promise.longStackTraces() को कॉल करने से बहुत कुछ डिबगिंग में मदद मिल सकती है।





angular-promise