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

ES6 Promise คืออ็อบเจ็กต์ ECMAScript 2015 ที่แสดงถึงการดำเนินการแบบอะซิงโครนัสที่กำลังดำเนินการอยู่

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

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ไม่ได้ออกจากห้องนี้สิ่งที่เป็นรูปแบบที่แนะนำสำหรับการจัดการนี้โดยไม่ต้องใช้ห้องสมุดสัญญา?


7
จะปฏิเสธในรูปแบบ async / รอคอยไวยากรณ์ได้อย่างไร
ฉันจะปฏิเสธคำสัญญาที่ส่งคืนโดยฟังก์ชัน async / await ได้อย่างไร เช่นเดิม foo(id: string): Promise<A> { return new Promise((resolve, reject) => { someAsyncPromise().then((value)=>resolve(200)).catch((err)=>reject(400)) }); } แปลเป็น async / รอคอย async foo(id: string): Promise<A> { try{ await someAsyncPromise(); return 200; } catch(error) {//here goes if someAsyncPromise() rejected} return 400; //this will result in a resolved promise. }); …

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(); } ใช้งานได้ดี แต่มีวิธีที่ง่ายกว่านี้หรือไม่ ถ้าไม่เป็นแบบนี้ดีหรือไม่?

17
การจัดการข้อผิดพลาดใน Promise.all
ฉันมีคำสัญญามากมายที่ฉันแก้ไขด้วย Promise.all(arrayOfPromises); ฉันไปเพื่อดำเนินการต่อสัญญาโซ่ ดูเหมือนอะไรแบบนี้ existingPromiseChain = existingPromiseChain.then(function() { var arrayOfPromises = state.routes.map(function(route){ return route.handler.promiseHandler(); }); return Promise.all(arrayOfPromises) }); existingPromiseChain = existingPromiseChain.then(function(arrayResolved) { // do stuff with my array of resolved promises, eventually ending with a res.send(); }); ฉันต้องการเพิ่มคำสั่ง catch เพื่อจัดการแต่ละสัญญาในกรณีที่เกิดข้อผิดพลาด แต่เมื่อฉันลองPromise.allส่งคืนข้อผิดพลาดแรกที่พบ (ไม่สนใจส่วนที่เหลือ) จากนั้นฉันไม่สามารถรับข้อมูลจากส่วนที่เหลือของสัญญาใน อาร์เรย์ (ที่ไม่ผิดพลาด) ฉันพยายามทำบางสิ่งเช่น .. existingPromiseChain = existingPromiseChain.then(function() …

6
ฉันต้องส่งคืนหลังจากแก้ไข / ปฏิเสธก่อนกำหนดหรือไม่
สมมติว่าฉันมีรหัสต่อไปนี้ function divide(numerator, denominator) { return new Promise((resolve, reject) => { if(denominator === 0){ reject("Cannot divide by 0"); return; //superfluous? } resolve(numerator / denominator); }); } หากเป้าหมายของฉันคือการใช้rejectเพื่อออกก่อนกำหนดฉันควรเข้าสู่นิสัยการreturnไอเอ็นจีทันทีหลังจากนั้นเช่นกัน?

6
การปฏิเสธสัญญาที่ไม่สามารถจัดการได้คืออะไร?
สำหรับการเรียนรู้ Angular 2 ฉันพยายามสอน ฉันได้รับข้อผิดพลาดเช่นนี้: (node:4796) UnhandledPromiseRejectionWarning: Unhandled promise rejection (r ejection id: 1): Error: spawn cmd ENOENT [1] (node:4796) DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node. js process with a non-zero exit code. ฉันผ่านคำถามและคำตอบต่าง ๆ ใน SO …

3
Promise.all: ลำดับของค่าที่แก้ไขแล้ว
มองไปที่MDNดูเหมือนว่าvaluesผ่านไปยังการthen()เรียกกลับของ Promise.all มีค่าตามลำดับของสัญญา ตัวอย่างเช่น: var somePromises = [1, 2, 3, 4, 5].map(Promise.resolve); return Promise.all(somePromises).then(function(results) { console.log(results) // is [1, 2, 3, 4, 5] the guaranteed result? }); ใครสามารถอ้างข้อมูลจำเพาะที่ระบุว่าvaluesควรจะเรียงลำดับใด? PS: การเรียกใช้โค้ดเช่นนั้นแสดงให้เห็นว่าสิ่งนี้ดูเหมือนจะเป็นจริงแม้ว่าจะไม่มีข้อพิสูจน์แน่นอน - มันอาจเป็นเรื่องบังเอิญ

7
Axios และ Fetch แตกต่างกันอย่างไร
ฉันกำลังเรียกใช้บริการเว็บโดยใช้การดึงข้อมูล แต่ฉันสามารถทำได้ด้วยความช่วยเหลือของ axios ดังนั้นตอนนี้ฉันสับสน ฉันควรจะไปหา axios หรือ fetch ไหม?

13
การประมวลผล Promise.all ดั้งเดิมของ Node.js เป็นแบบขนานหรือเรียงตามลำดับหรือไม่
ฉันต้องการชี้แจงประเด็นนี้เนื่องจากเอกสารไม่ชัดเจนเกินไป Q1:มีการPromise.all(iterable)ประมวลผลสัญญาตามลำดับหรือในแบบคู่ขนาน? หรือโดยเฉพาะอย่างยิ่งมันเป็นเทียบเท่ากับการทำงานที่ถูกผูกมัดสัญญาเช่น p1.then(p2).then(p3).then(p4).then(p5).... หรือมันคือบางชนิดอื่น ๆ ของอัลกอริทึมที่ทุกp1, p2, p3, p4, p5ฯลฯ จะถูกเรียกในเวลาเดียวกัน (ในแบบคู่ขนาน) และผลจะถูกส่งกลับทันทีที่ทุกแก้ไข (หรือหนึ่งปฏิเสธ)? Q2:หากPromise.allทำงานแบบขนานมีวิธีที่สะดวกในการเรียกใช้ซ้ำ ๆ ได้หรือไม่? หมายเหตุ : ฉันไม่ต้องการใช้ Q หรือ Bluebird แต่เป็นข้อมูลจำเพาะ ES6 ทั้งหมด

8
Axios เข้าถึงช่องส่วนหัวการตอบกลับ
ฉันกำลังสร้างแอปส่วนหน้าด้วย React และ Redux และฉันใช้axiosเพื่อดำเนินการตามคำขอของฉัน ฉันต้องการเข้าถึงฟิลด์ทั้งหมดในส่วนหัวของการตอบกลับ ในเบราว์เซอร์ของฉันฉันสามารถตรวจสอบส่วนหัวและฉันเห็นว่าทุกฟิลด์ที่ฉันต้องการมีอยู่ (เช่นโทเค็น, uid, ฯลฯ ... ) แต่เมื่อฉันโทร const request = axios.post(`${ROOT_URL}/auth/sign_in`, props); request.then((response)=>{ console.log(response.headers); }); ฉันเพิ่งได้รับ Object {content-type: "application/json; charset=utf-8", cache-control: "max-age=0, private, must-revalidate"} ที่นี่แท็บเครือข่ายเบราว์เซอร์ของฉันเนื่องจากคุณสามารถดูฟิลด์อื่นทั้งหมดได้ bests

22
ฉันจะกำหนดสถานะของสัญญา JavaScript ได้อย่างไร
ฉันมีสัญญา JavaScript บริสุทธิ์ (การติดตั้งในตัวหรือการเติมโพลี): var promise = new Promise(function (resolve, reject) { /* ... */ }); จากข้อกำหนดคุณสมบัติสัญญาสามารถเป็นหนึ่งใน: 'ตัดสิน' และ 'แก้ไขแล้ว' 'ตัดสิน' และ 'ปฏิเสธ' 'รอดำเนินการ' ฉันมีกรณีการใช้งานที่ฉันต้องการสอบปากคำสัญญาพร้อมกันและกำหนด: สัญญาถูกตัดสินหรือไม่ ถ้าเป็นเช่นนั้นสัญญาจะได้รับการแก้ไขหรือไม่ ฉันรู้ว่าฉันสามารถใช้#then()เพื่อกำหนดเวลาการทำงานที่จะดำเนินการแบบอะซิงโครนัสหลังจากสถานะการเปลี่ยนแปลงสัญญา ฉันไม่ได้ถามว่าจะทำอย่างไร คำถามนี้เป็นคำถามเฉพาะที่เกี่ยวกับการสอบสวนซิงโครของรัฐของสัญญา ฉันจะบรรลุสิ่งนี้ได้อย่างไร

5
การคืนสัญญาจากการกระทำของ Vuex
ฉันเพิ่งเริ่มโยกย้ายสิ่งต่างๆจาก jQ ไปยังเฟรมเวิร์กที่มีโครงสร้างมากกว่าคือ VueJS และฉันก็ชอบมัน! ตามแนวคิดแล้ว Vuex เป็นการปรับเปลี่ยนกระบวนทัศน์เล็กน้อยสำหรับฉัน แต่ฉันมั่นใจว่าฉันรู้ว่าตอนนี้มันเป็นอย่างไรและเข้าใจทั้งหมด! แต่มีพื้นที่สีเทาเล็กน้อยส่วนใหญ่มาจากมุมมองของการนำไปใช้งาน อันนี้ฉันรู้สึกว่าดีจากการออกแบบ แต่ไม่รู้ว่ามันขัดแย้งกับวัฏจักร Vuex ของการไหลของข้อมูลแบบทิศทางเดียวหรือไม่ โดยพื้นฐานแล้วถือเป็นแนวทางปฏิบัติที่ดีในการคืนสัญญา (- เหมือน) วัตถุจากการกระทำหรือไม่? ฉันถือว่าสิ่งเหล่านี้เป็นเหมือน async wrappers ด้วยสถานะของความล้มเหลวและสิ่งที่คล้ายกันดังนั้นดูเหมือนว่าจะเหมาะสมที่จะคืนสัญญา ผู้กลายพันธุ์ในทางตรงกันข้ามจะเปลี่ยนสิ่งต่าง ๆ และเป็นโครงสร้างที่บริสุทธิ์ภายในร้านค้า / โมดูล

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