Круговые зависимости в Titanium/ RequireJs

У меня есть некоторые циклические зависимости в моем приложении Titanium, например:

index.js

var Auth = require('Auth')

Auth.js

var PopUp = require('PopUp');

function isLoggedIn() {
    // some logic e.g. return userName !== null
};

function authorise() {
    if (isLoggedIn()) {
        return true;
    } else {
        return PopUp.authorise();
    }
}

Неожиданно возникнуть

var Auth = require("Auth");

function authorise() {
    // some code asking user to login
}


function showSecurePopUp() {
   if (Auth.isLoggedIn()) {
       // show secure pop up
   }
}

Как видите, у нас круговая зависимость. Auth потребности PopUp а также PopUp потребности Auth,

Это создает циклическую зависимость и, следовательно, следующее сообщение об ошибке:

[ERROR] [iphone, 10.3.3, 192.168.0.64]
Type: RangeError
Message: Maximum call stack size exceeded.
File: /iphone/Auth.js.js
Line: 24

Как я могу решить проблему циклических зависимостей в приложении Titanium Alloy?

1 ответ

Я думаю, что так может быть, вы вносите следующие изменения в свой проект, и это должно решить проблему.

Alloy.js

var Auth = require("Auth");
var PopUp = require('PopUp');

index.js

Auth.authorise();

Auth.js

var isLoggedIn = function() {
    // some logic e.g. return userName !== null
    Ti.API.info('isLoggedIn');
    return false;
};

exports.authorise = function() {
    if (isLoggedIn()) {
        Ti.API.info('authorize isloggedIn');
        return true;
    } else {
        Ti.API.info('authorize not logged In');
        return PopUp.authorise();
    }
};

exports.isLoggedIn = isLoggedIn; 

PopUp.js

exports.authorise =function () {
    // some code asking user to login
    Ti.API.info('authorize funcition popup ' + Auth.isLoggedIn());
};


function showSecurePopUp() {
   if (Auth.isLoggedIn()) {
       // show secure pop up
       Ti.API.info('isLoggedIn show secure popup');
   }
}

Дайте мне знать, если это работает нормально, и если это то, что вы хотели. Также, если у вас есть какой-то другой подход, который решает проблему, то дайте мне знать об этом.

Удачи и Приветствия

Ашиш Себастьян

Другие вопросы по тегам