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

สัญญาเป็นกลยุทธ์สำหรับการคำนวณรอตัดบัญชีเหมาะสำหรับหลายรูปแบบของการเกิดพร้อมกัน: เธรดและการวนรอบเหตุการณ์พร้อมกันสำหรับการคำนวณในเครื่องและการส่งข้อความระยะไกลแบบซิงโครนัสและแบบอะซิงโครนัส คำมั่นสัญญาหมายถึงผลลัพธ์ในที่สุดของการดำเนินการแบบอะซิงโครนัส วิธีหลักในการทำงานกับสัญญาคือวิธีการที่ลงทะเบียนการเปลี่ยนแปลงจากมูลค่าในที่สุดของสัญญาหรือเหตุผลความล้มเหลวเป็นสัญญาใหม่

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

20
ใช้ async / await กับ forEach loop
มีปัญหากับการใช้async/ awaitในการforEachวนซ้ำหรือไม่? ฉันพยายามวนซ้ำไฟล์ต่าง ๆ และawaitเนื้อหาของแต่ละไฟล์ import fs from 'fs-promise' async function printFiles () { const files = await getFilePaths() // Assume this works fine files.forEach(async (file) => { const contents = await fs.readFile(file, 'utf8') console.log(contents) }) } printFiles() รหัสนี้ใช้งานได้ แต่มีบางอย่างผิดปกติกับสิ่งนี้หรือไม่ ฉันมีใครบางคนบอกฉันว่าคุณไม่ควรใช้async/ awaitในลำดับการทำงานที่สูงขึ้นเช่นนี้ดังนั้นฉันแค่อยากจะถามว่ามันมีปัญหาหรือไม่

19
ฉันจะแปลง API การเรียกกลับที่มีอยู่เป็นสัญญาได้อย่างไร
ฉันต้องการทำงานกับคำสัญญา แต่ฉันมี callback API ในรูปแบบดังนี้: 1. โหลด DOM หรือเหตุการณ์ครั้งเดียวอื่น ๆ : window.onload; // set to callback ... window.onload = function() { }; 2. โทรกลับธรรมดา: function request(onChangeHandler) { ... } request(function() { // change happened ... }); 3. การเรียกกลับสไตล์โหนด ("nodeback"): function getStuff(dat, callback) { ... } getStuff("dataParam", function(err, data) { ... …

17
ฉันจะเข้าถึงผลลัพธ์ของสัญญาก่อนหน้านี้ในห่วงโซ่แล้ว. () ได้อย่างไร
ฉันได้ปรับโครงสร้างรหัสของฉันให้เป็นสัญญาและสร้างห่วงโซ่สัญญาที่มีความยาวอันยอดเยี่ยมซึ่งประกอบด้วยการ.then()เรียกกลับหลายครั้ง ในที่สุดผมต้องการที่จะกลับบางค่าคอมโพสิตและจำเป็นที่จะต้องเข้าถึงหลายผลสัญญากลาง อย่างไรก็ตามค่าความละเอียดจากจุดกึ่งกลางของลำดับไม่อยู่ในขอบเขตในการโทรกลับครั้งล่าสุดฉันจะเข้าถึงได้อย่างไร function getExample() { return promiseA(…).then(function(resultA) { // Some processing return promiseB(…); }).then(function(resultB) { // More processing return // How do I gain access to resultA here? }); }

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) …

6
ไวยากรณ์สำหรับฟังก์ชั่นลูกศร async
ฉันสามารถทำเครื่องหมายฟังก์ชันจาวาสคริปต์เป็น "async" (เช่นคืนสัญญา) ด้วยasyncคำหลัก แบบนี้: async function foo() { // do something } ไวยากรณ์เทียบเท่าสำหรับฟังก์ชั่นลูกศรคืออะไร

10
jQuery รอการตัดบัญชีและสัญญา - .then () vs .done ()
ฉันอ่านเกี่ยวกับ jQuery รอการตัดบัญชีและสัญญาและฉันไม่เห็นความแตกต่างระหว่างการใช้.then()& .done()สำหรับการโทรกลับที่ประสบความสำเร็จ ฉันรู้ว่าEric Hyndsพูดถึงเรื่องนั้น.done()และ.success()แมปไปยังฟังก์ชั่นเดียวกัน แต่ฉันเดา.then()ว่าจะเป็นเช่นนั้นเพราะการเรียกกลับทั้งหมดถูกเรียกใช้เมื่อการดำเนินการที่ประสบความสำเร็จเสร็จสิ้น ใครช่วยสอนฉันให้ฉันเกี่ยวกับการใช้ที่ถูกต้องได้ไหม

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 }); }); }); รหัสไหนมากกว่าและอ่านได้น้อยกว่า ฉันไม่ได้อะไรเลยนี่มันไม่ได้ 'แบน' อย่างน่าอัศจรรย์ ไม่ต้องพูดถึงต้องเปลี่ยนสิ่งต่าง ๆ เพื่อสัญญา ดังนั้นเอะอะใหญ่เกี่ยวกับสัญญาที่นี่คืออะไร?

18
รอจนกว่าสัญญาทั้งหมดจะเสร็จสิ้นแม้ว่าบางคนจะถูกปฏิเสธ
สมมติว่าฉันมีชุดของPromiseที่กำลังร้องขอเครือข่ายซึ่งจะล้มเหลว: // http://does-not-exist will throw a TypeError var arr = [ fetch('index.html'), fetch('http://does-not-exist') ] Promise.all(arr) .then(res => console.log('success', res)) .catch(err => console.log('error', err)) // This is executed สมมติว่าฉันต้องการรอจนกว่าสิ่งเหล่านี้จะเสร็จสิ้นโดยไม่คำนึงว่ามีใครล้มเหลว อาจมีข้อผิดพลาดของเครือข่ายสำหรับทรัพยากรที่ฉันสามารถอยู่ได้โดยปราศจาก แต่ถ้าฉันสามารถหาได้ฉันต้องการก่อนดำเนินการต่อ ฉันต้องการจัดการกับความล้มเหลวของเครือข่ายอย่างสง่างาม เนื่องจากPromises.allไม่ได้ออกจากห้องนี้สิ่งที่เป็นรูปแบบที่แนะนำสำหรับการจัดการนี้โดยไม่ต้องใช้ห้องสมุดสัญญา?

5
สัญญาจาวาสคริปต์ - ปฏิเสธกับการโยน
ฉันได้อ่านบทความหลายเรื่องในหัวข้อนี้ แต่ก็ยังไม่ชัดเจนสำหรับฉันหากมีข้อแตกต่างระหว่างPromise.rejectกับการส่งข้อผิดพลาด ตัวอย่างเช่น, ใช้ Promise.reject return asyncIsPermitted() .then(function(result) { if (result === true) { return true; } else { return Promise.reject(new PermissionDenied()); } }); โดยใช้การโยน return asyncIsPermitted() .then(function(result) { if (result === true) { return true; } else { throw new PermissionDenied(); } }); การตั้งค่าของฉันคือการใช้throwเพียงเพราะมันสั้นกว่า แต่ก็สงสัยว่ามีข้อได้เปรียบของอีกคนหนึ่ง

9
std :: สัญญาคืออะไร?
ผมค่อนข้างคุ้นเคยกับ C ++ 11 std::thread, std::asyncและstd::futureส่วนประกอบ (เช่นดูคำตอบนี้ ) ซึ่งจะตรงไปข้างหน้า อย่างไรก็ตามฉันไม่สามารถเข้าใจได้ว่าstd::promiseมันคืออะไรมันทำอะไรและใช้ในสถานการณ์แบบไหนดีที่สุด เอกสารมาตรฐานนั้นไม่มีข้อมูลจำนวนมากเกินกว่าบทสรุปในชั้นเรียนและไม่มีเพียง :: เธรดเพียง ใครช่วยกรุณาstd::promiseเล่าตัวอย่างสั้น ๆ สังเขปของสถานการณ์ที่จำเป็นและเป็นวิธีแก้ปัญหาที่สำนวนที่สุด?


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 ด้วยการผูกมัด. แล้ว () รหัสน้อยเกินไปดังนั้นก่อนตัวอย่างข้างต้น

5
ข้อแตกต่างระหว่าง Deferred, Promise และ Future ใน JavaScript คืออะไร
อะไรคือความแตกต่างระหว่างรอการตัดบัญชีสัญญาและสัญญาซื้อขายล่วงหน้า? มีทฤษฎีที่ได้รับการรับรองโดยทั่วไปอยู่เบื้องหลังทั้งสามนี้หรือไม่?

20
แก้ไข Javascript สัญญานอกขอบเขตฟังก์ชั่น
ฉันใช้สัญญา ES6 ตามปกติสัญญาจะสร้างและใช้งานเช่นนี้ new Promise(function(resolve, reject){ if (someCondition){ resolve(); } else { reject(); } }); แต่ฉันได้ทำบางอย่างเช่นด้านล่างเพื่อแก้ไขปัญหาภายนอกเพื่อความยืดหยุ่น var outsideResolve; var outsideReject; new Promise(function(resolve, reject) { outsideResolve = resolve; outsideReject = reject; }); และหลังจากนั้น onClick = function(){ outsideResolve(); } ใช้งานได้ดี แต่มีวิธีที่ง่ายกว่านี้หรือไม่ ถ้าไม่เป็นแบบนี้ดีหรือไม่?

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.