คำถามติดแท็ก angular-promise

28
สัญญาและของรางวัลต่างกันอย่างไร
ความแตกต่างระหว่างPromiseและObservableในเชิงมุมคืออะไร? ตัวอย่างในแต่ละกรณีจะเป็นประโยชน์ในการทำความเข้าใจทั้งสองกรณี ในสถานการณ์ใดที่เราสามารถใช้แต่ละกรณี

10
AngularJS: เริ่มต้นบริการด้วยข้อมูลแบบอะซิงโครนัส
ฉันมีบริการ AngularJS ที่ฉันต้องการเริ่มต้นด้วยข้อมูลอะซิงโครนัสบางส่วน บางสิ่งเช่นนี้ myModule.service('MyService', function($http) { var myData = null; $http.get('data.json').success(function (data) { myData = data; }); return { setData: function (data) { myData = data; }, doStuff: function () { return myData.getSomeData(); } }; }); เห็นได้ชัดว่าสิ่งนี้จะไม่ทำงานเพราะหากมีสิ่งใดที่พยายามโทรหาdoStuff()ก่อนที่myDataจะกลับมาฉันจะได้รับข้อยกเว้นตัวชี้ null เท่าที่ฉันสามารถบอกได้จากการอ่านคำถามอื่น ๆ ที่ถามที่นี่และที่นี่ฉันมีตัวเลือกน้อย แต่ไม่มีคำถามใดที่ดูสะอาดมาก (บางทีฉันอาจขาดอะไรซักอย่าง): บริการติดตั้งด้วย "run" เมื่อตั้งค่าแอพของฉันทำสิ่งนี้: myApp.run(function ($http, MyService) …

8
จะยกเลิกคำขอ $ http ใน AngularJS ได้อย่างไร
รับคำขอ Ajax ใน AngularJS $http.get("/backend/").success(callback); วิธีที่มีประสิทธิภาพมากที่สุดในการยกเลิกคำขอนั้นคือถ้ามีการเปิดตัวคำขออื่น (เช่นแบ็กเอนด์เดียวกันพารามิเตอร์ที่แตกต่างกัน)

12
จะเข้าถึงคุณค่าของสัญญาได้อย่างไร?
ฉันกำลังดูตัวอย่างนี้จากเอกสารของ Angular $qแต่ฉันคิดว่านี่อาจใช้กับสัญญาโดยทั่วไป ตัวอย่างด้านล่างนี้ถูกคัดลอกคำต่อคำจากเอกสารโดยมีความคิดเห็นรวมอยู่ด้วย: promiseB = promiseA.then(function(result) { return result + 1; }); // promiseB will be resolved immediately after promiseA is resolved and its value // will be the result of promiseA incremented by 1 ฉันไม่ชัดเจนว่ามันใช้งานได้อย่างไร ถ้าผมสามารถเรียก.then()ผลการใช้ครั้งแรก.then(), ผูกมัดพวกเขาซึ่งฉันรู้ว่าฉันสามารถแล้วเป็นวัตถุสัญญาประเภทpromiseB มันไม่ได้เป็นObject Numberดังนั้นสิ่งที่พวกเขาหมายถึงโดย "คุณค่าของมันจะเป็นผลมาจากสัญญาเพิ่มขึ้น 1"? ฉันควรจะเข้าถึงสิ่งที่เป็นpromiseB.valueหรืออะไรแบบนั้น? การติดต่อกลับสำเร็จจะส่งคืนสัญญาและส่งคืน "ผลลัพธ์ + 1" ได้อย่างไร ฉันคิดถึงบางอย่าง

5
รอให้ทุกคำสัญญาคลี่คลาย
ดังนั้นฉันจึงมีสถานการณ์ที่ฉันมีโซ่สัญญาหลายอันที่ไม่ทราบความยาว ฉันต้องการให้ดำเนินการบางอย่างเมื่อ CHAINS ทั้งหมดได้รับการประมวลผลแล้ว เป็นไปได้หรือไม่? นี่คือตัวอย่าง: app.controller('MainCtrl', function($scope, $q, $timeout) { var one = $q.defer(); var two = $q.defer(); var three = $q.defer(); var all = $q.all([one.promise, two.promise, three.promise]); all.then(allSuccess); function success(data) { console.log(data); return data + "Chained"; } function allSuccess(){ console.log("ALL PROMISES RESOLVED") } one.promise.then(success).then(success); two.promise.then(success); three.promise.then(success).then(success).then(success); $timeout(function () …

1
ไม่เคยแก้ไขสัญญาทำให้หน่วยความจำรั่ว?
ฉันมีPromise. ฉันสร้างมันขึ้นเพื่อยกเลิกคำขอ AJAX หากจำเป็น แต่เนื่องจากฉันไม่จำเป็นต้องยกเลิก AJAX นั้นฉันจึงไม่เคยแก้ไขเลยและ AJAX ก็ทำสำเร็จ ข้อมูลโค้ดแบบง่าย: var defer = $q.defer(); $http({url: 'example.com/some/api', timeout: defer.promise}).success(function(data) { // do something }); // Never defer.resolve() because I don't need to cancel that ajax. What happens to this promise after request? ไม่เคยแก้สัญญาเช่นนั้นทำให้หน่วยความจำรั่วไหล? คุณมีคำแนะนำเกี่ยวกับการจัดการPromiseวงจรชีวิตหรือไม่?
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.