- From: Marcos Cáceres <notifications@github.com>
- Date: Wed, 02 May 2018 17:26:23 -0700
- To: w3c/payment-request <payment-request@noreply.github.com>
- Cc: Subscribed <subscribed@noreply.github.com>
- Message-ID: <w3c/payment-request/issues/705/386161086@github.com>
Ok, `.retry()` with recursive validation with event support (my submission for JS1k this year?): ```JS async function doPaymentRequest() { const request = new PaymentRequest(methodData, details, options); const response = await request.show(); await recursiveValidate(response); await response.complete("success"); } async function recursiveValidate(response) { const promisesToFixThings = []; const errors = await validate(response); if (!errors) { return; } if (errors.shippingAddressErrors) { const promise = fixField(response, "shippingaddresschange", shippingValidator); promisesToFixThings.push(promise); } if (errors.payerErrors) { const promise = fixField(response, "payerdetailschange", payerValidator); promisesToFixThings.push(promise); } await Promise.all([response.retry(errors), ...promisesToFixThings]); await recursiveValidate(response); } function fixField(response, event, validator) { return new Promise(resolve => { // Browser keeps calling this until promise resolves. response.addEventListener(event, async function handler(ev) { const promiseToValidate = validator(response); ev.updateWith(promiseToValidate); const errors = await promiseToValidate; if (!errors) { // yay! fixed! event.removeEventListener(event, handler); resolve(); } }); }); } doPaymentRequest(); ``` -- You are receiving this because you are subscribed to this thread. Reply to this email directly or view it on GitHub: https://github.com/w3c/payment-request/issues/705#issuecomment-386161086
Received on Thursday, 3 May 2018 00:26:48 UTC