+ Start a Discussion

$A.getCallback disables returned javascript Promise when Locker Service is enabled

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"  />


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){
                        // console.log('now!');
                        done('yo ' + cmp.get('v.myatt'));
                    }), 2000);
                // return 'yo ' + cmp.get('v.myatt');
            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
See stackexchange answer here: http://salesforce.stackexchange.com/questions/148478/promise-returns-a-locked-object-inside-lightning-component-when-locker-service-i