You need to sign in to do that
Don't have an account?
Arturs
$A.getCallback disables returned javascript Promise when Locker Service is enabled
Hi,
I am trying to use javascript promises to perform multi-step asynchronous operations in lightning components. Unfortuantely I am stuck with the problem where the promise behaves incorrectly within $A.getCallback context. Here is a simplified app and js controller to demostrate the problem.
I have a simple app definition with a string attribute that defaults to "superman".
Associated controller.js code uses Promises:
I would really like to utilise the power of promises as it's a nightmare to use callbacks all the time. Any ideas?
I am trying to use javascript promises to perform multi-step asynchronous operations in lightning components. Unfortuantely I am stuck with the problem where the promise behaves incorrectly within $A.getCallback context. Here is a simplified app and js controller to demostrate the problem.
I have a simple app definition with a string attribute that defaults to "superman".
<aura:application > <aura:handler name="init" value="{!this}" action="{!c.init}"/> <aura:attribute name="myatt" type="String" required="false" default="superman" access="private" /> </aura:application>
Associated controller.js code uses Promises:
({ init : function( cmp, evt, h) { Promise.resolve(1).then($A.getCallback(function(val) { console.log('val %o', val); return new Promise($A.getCallback(function(done, err){ setTimeout($A.getCallback(function(){ // console.log('now!'); done('yo ' + cmp.get('v.myatt')); }), 2000); })); // return 'yo ' + cmp.get('v.myatt'); })).then($A.getCallback(function(res){ console.log('Result: %o', res); })); } })When locker service is disabled, the console log outputs an expected output (notice that Result appears after 2 seconds):
val 1 Result: "yo superman"However, when Locker Service is enabled, the Result becomes javascript Object with no useful attributes that is returned immediatly:
val 1 Result: Object (When object is expanded) -> $then$: function () -> __proto__: Object
I would really like to utilise the power of promises as it's a nightmare to use callbacks all the time. Any ideas?
Best Answer chosen by Arturs
Arturs
See stackexchange answer here: http://salesforce.stackexchange.com/questions/148478/promise-returns-a-locked-object-inside-lightning-component-when-locker-service-i