คำถามติดแท็ก q

2
Antipattern สัญญาก่อสร้างที่ชัดเจนคืออะไรและฉันจะหลีกเลี่ยงได้อย่างไร
ฉันกำลังเขียนโค้ดที่ทำสิ่งที่ดูเหมือน: function getStuffDone(param) { | function getStuffDone(param) { var d = Q.defer(); /* or $q.defer */ | return new Promise(function(resolve, reject) { // or = new $.Deferred() etc. | // using a promise constructor myPromiseFn(param+1) | myPromiseFn(param+1) .then(function(val) { /* or .done */ | .then(function(val) { d.resolve(val); | resolve(val); }).catch(function(err) …

10
ไม่ได้สัญญาไว้เพียงแค่โทรกลับ
ฉันพัฒนา JavaScript มาหลายปีแล้วและฉันก็ไม่เข้าใจว่าสัญญาจะเกิดอะไรขึ้น ดูเหมือนว่าทั้งหมดที่ฉันทำคือการเปลี่ยนแปลง: api(function(result){ api2(function(result2){ api3(function(result3){ // do work }); }); }); ซึ่งฉันสามารถใช้ห้องสมุดเช่นasyncสำหรับต่อไปกับสิ่งที่ชอบ api().then(function(result){ api2().then(function(result2){ api3().then(function(result3){ // do work }); }); }); รหัสไหนมากกว่าและอ่านได้น้อยกว่า ฉันไม่ได้อะไรเลยนี่มันไม่ได้ 'แบน' อย่างน่าอัศจรรย์ ไม่ต้องพูดถึงต้องเปลี่ยนสิ่งต่าง ๆ เพื่อสัญญา ดังนั้นเอะอะใหญ่เกี่ยวกับสัญญาที่นี่คืออะไร?


5
อะไรคือความแตกต่างระหว่างมูลค่าส่งคืนหรือสัญญาแก้ไขจากนั้น ()
อะไรคือความแตกต่างระหว่าง: new Promise(function(res, rej) { res("aaa"); }) .then(function(result) { return "bbb"; }) .then(function(result) { console.log(result); }); เรียกใช้ข้อมูลโค้ดซ่อนผลลัพธ์ขยายตัวอย่างข้อมูล และนี่: new Promise(function(res, rej) { res("aaa"); }) .then(function(result) { return Promise.resolve("bbb"); }) .then(function(result) { console.log(result); }); เรียกใช้ข้อมูลโค้ดซ่อนผลลัพธ์ขยายตัวอย่างข้อมูล ฉันกำลังถามว่าฉันได้รับพฤติกรรมที่แตกต่างโดยใช้บริการ Angular และ $ http ด้วยการผูกมัด. แล้ว () รหัสน้อยเกินไปดังนั้นก่อนตัวอย่างข้างต้น

27
แก้ไขสัญญาหนึ่งหลังจากที่อื่น (เช่นในลำดับ)?
พิจารณารหัสต่อไปนี้ที่อ่านอาเรย์ของไฟล์ในลักษณะอนุกรม / เรียงลำดับ readFilesส่งคืนสัญญาซึ่งแก้ไขได้เมื่อไฟล์ทั้งหมดถูกอ่านตามลำดับ var readFile = function(file) { ... // Returns a promise. }; var readFiles = function(files) { return new Promise((resolve, reject) => var readSequential = function(index) { if (index >= files.length) { resolve(); } else { readFile(files[index]).then(function() { readSequential(index + 1); }).catch(reject); } }; readSequential(0); // Start! …

1
ยังมีเหตุผลที่จะใช้ห้องสมุดสัญญาเช่น Q หรือ BlueBird ตอนนี้ที่เรามีสัญญา ES6 หรือไม่? [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดให้บริการใน4 ปีที่แล้ว ปรับปรุงคำถามนี้ หลังจาก Node.js เพิ่มการสนับสนุนแบบเนทีฟสำหรับคำสัญญาแล้วยังมีเหตุผลที่จะใช้ห้องสมุดอย่าง Q หรือ BlueBird หรือไม่? ตัวอย่างเช่นหากคุณกำลังเริ่มโครงการใหม่และสมมติว่าในโครงการนี้คุณไม่มีการอ้างอิงใด ๆ ที่ใช้ไลบรารีเหล่านี้เราสามารถพูดได้หรือไม่ว่าไม่มีเหตุผลที่จะใช้ไลบรารีดังกล่าวอีกต่อไป?

3
Angularjs $ q ทั้งหมด
ฉันใช้ $ q.all ใน angularjs แล้ว แต่ฉันไม่สามารถทำให้โค้ดทำงานได้ นี่คือรหัสของฉัน: UploadService.uploadQuestion = function(questions){ var promises = []; for(var i = 0 ; i < questions.length ; i++){ var deffered = $q.defer(); var question = questions[i]; $http({ url : 'upload/question', method: 'POST', data : question }). success(function(data){ deffered.resolve(data); }). error(function(error){ deffered.reject(); }); promises.push(deffered.promise); …
106 angularjs  promise  q 

1
Angular $ q ทำงานอย่างไร
มีใครช่วยอธิบายหน่อยได้ไหมว่า$q.whenAngularJS ทำงานอย่างไร ฉันพยายามวิเคราะห์วิธีการ$httpทำงานและพบสิ่งนี้: var promise = $q.when(config); และนี่คือวัตถุกำหนดค่าจากคอนโซล Chrome: Object {transformRequest: Array[1], transformResponse: Array[1], cache: Object, method: "GET", url: "/schedule/month_index.html"…} cache: Object headers: Object method: "GET" transformRequest: Array[1] transformResponse: Array[1] url: "/schedule/month_index.html" __proto__: Object จะเกิดอะไรขึ้นต่อไป? วัตถุนี้ได้รับการแก้ไขหรือปฏิเสธอย่างไร
97 angularjs  deferred  q 

8
การแทนที่การโทรกลับด้วยคำสัญญาใน Node.js
ฉันมีโมดูลโหนดอย่างง่ายที่เชื่อมต่อกับฐานข้อมูลและมีฟังก์ชันต่างๆในการรับข้อมูลตัวอย่างเช่นฟังก์ชันนี้: dbConnection.js: import mysql from 'mysql'; const connection = mysql.createConnection({ host: 'localhost', user: 'user', password: 'password', database: 'db' }); export default { getUsers(callback) { connection.connect(() => { connection.query('SELECT * FROM Users', (err, result) => { if (!err){ callback(result); } }); }); } }; โมดูลจะถูกเรียกด้วยวิธีนี้จากโมดูลโหนดอื่น: app.js: import dbCon from './dbConnection.js'; dbCon.getUsers(console.log); …

9
คุณจะคืนค่าหลายค่าจากสัญญาได้อย่างไร?
เมื่อเร็ว ๆ นี้ฉันต้องเจอกับสถานการณ์บางอย่างสองสามครั้งซึ่งฉันไม่รู้วิธีแก้ปัญหาอย่างถูกต้อง สมมติรหัสต่อไปนี้: somethingAsync() .then( afterSomething ) .then( afterSomethingElse ) function afterSomething( amazingData ) { return processAsync( amazingData ); } function afterSomethingElse( processedData ) { } ตอนนี้สถานการณ์อาจเกิดขึ้นที่ฉันต้องการที่จะมีการเข้าถึงในamazingDataafterSomethingElse วิธีแก้ปัญหาที่ชัดเจนวิธีหนึ่งคือการส่งคืนอาร์เรย์หรือแฮชจากafterSomethingเนื่องจากคุณสามารถส่งคืนค่าจากฟังก์ชันได้เพียงค่าเดียว แต่ฉันสงสัยว่ามีวิธีafterSomethingElseยอมรับ 2 พารามิเตอร์และเรียกใช้ในลักษณะเดียวกันหรือไม่เพราะดูเหมือนจะง่ายกว่ามากในการจัดทำเอกสารและทำความเข้าใจ ฉันแค่สงสัยเกี่ยวกับความเป็นไปได้นี้เนื่องจากมีQ.spreadสิ่งที่คล้ายกับที่ฉันต้องการ
87 javascript  promise  q 

5
วิธีตรวจสอบว่ามีการแก้ไขสัญญา Angular $ q หรือไม่
ฉันเข้าใจว่าโดยทั่วไปแล้วเราจะแนบรหัสความต่อเนื่องที่มีลักษณะการthen()โทรและลูกโซ่เมื่อใช้คำสัญญา อย่างไรก็ตามฉันต้องการเริ่มต้นการโทรแบบอะซิงโครนัสที่ผูกมัดตามสัญญาแล้วเริ่มต้น 3 วินาที$timeout()เพื่อให้ฉันสามารถดำเนินการ UI ได้เฉพาะในกรณีที่สัญญาเดิมยังไม่เสร็จสมบูรณ์ (ฉันคาดว่าสิ่งนี้จะเกิดขึ้นเฉพาะกับการเชื่อมต่อที่ช้าอุปกรณ์มือถือบน 3G ฯลฯ ) เมื่อได้รับสัญญาฉันสามารถตรวจสอบได้ว่าเสร็จสมบูรณ์หรือไม่โดยไม่ปิดกั้นหรือรอ?
84 angularjs  promise  q 
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.