Skip to main content
Announcements
Qlik Connect 2024! Seize endless possibilities! LEARN MORE
cancel
Showing results for 
Search instead for 
Did you mean: 
bryan_sng
Partner - Creator
Partner - Creator

qlik.openApp and qlik.close

Hello guys,

I was trying to open an App using qlik.openApp(...);

I thought I should also do a clean up after opening using app.close();

However later I would need to open the app again using the exact same qlik.openApp(...);

It turns out that the later openApp command would randomly fail, do you guys have any ideas?

Below is a code sample to replicate.

I would like to point out that if I do not clean up using app.close, the entire extension has no problem.

paint: function(...) {

  var config1 = {

    host: window.location.hostname,

    port: window.location.port,

    prefix: "/",

    isSecure: window.location.protocol === "https:",

    identity: '1234567890'

  };


  var app1 = qlik.openApp('myapp', config1);

  // do something here but long enough for rpc session to be successfully opened at openApp

  app1.close();

  // do something here but long enough for rpc session to be successfully closed at close



  var config2 = {

    host: window.location.hostname,

    port: window.location.port,

    prefix: "/",

    isSecure: window.location.protocol === "https:",

    identity: '9999999999'

  };


  var app2 = qlik.openApp('myapp', config); // this method will randomly fail

  app2.close(); // this method will randomly fail


  console.log(app1 == app2); // this actually return true!

}


The error would be:

TypeError: Cannot read property 'promise' of undefined

    at client.js??1423665506275:100

    at k.$get.k.$eval (require.js?1423665506275:43)

    at k.$get.k.$apply (require.js?1423665506275:43)

    at Object.m.$apply (client.js??1423665506275:11)

    at Object.o [as openApp] (client.js??

10 Replies
adriennn
Partner - Contributor II
Partner - Contributor II

You cannot directly compare two nested objects (temp1 and temp2) with an equality == operator. You either need to use a deep equality algorithm or more simply just compare the app ids.