Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Порядок выполнения функций с Promise. (https://javascript.ru/forum/events/68641-poryadok-vypolneniya-funkcijj-s-promise.html)

Даниленко Денис 28.04.2017 15:40

Порядок выполнения функций с Promise.
 
Здравствуйте.

Вначале приведу код.

Вызов главной функции:
function ChooseUserCerts()
{
    var StoreObj = new ClassStore();
    StoreObj.OpenStore();

    var CertCount = StoreObj.GetCertCount();
    alert(CertCount);
}


Вызов классов с promise:
function ClassStore()
{
    this.MyStore = 0;
}

ClassStore.prototype.OpenStore = function () {
    return new Promise(function(resolve, reject){
        cadesplugin.async_spawn(function *(args) {
                this.MyStore = yield cadesplugin.CreateObjectAsync("CAdESCOM.Store");
                yield this.MyStore.Open(cadesplugin.CAPICOM_CURRENT_USER_STORE, cadesplugin.CAPICOM_MY_STORE,
                    cadesplugin.CAPICOM_STORE_OPEN_MAXIMUM_ALLOWED);

                var CertificatesObj = yield this.MyStore.Certificates;

                var Count = yield CertificatesObj.Count;
                if (Count == 0) {
                    alert("Certificate not found: ");
                }
            alert(Count);

        }, resolve, reject);
    });
}

ClassStore.prototype.GetCertCount = function ()
{
    return new Promise(function(resolve, reject){
    cadesplugin.async_spawn(function *(args)
        {
            var CertificatesObj = yield this.MyStore.Certificates;
            var Count = yield CertificatesObj.Count;
            alert(Count);
        }, resolve, reject);
    });       
    
    return Count;
}


Суть в том, что я вызываю в главной функции 2 метода:
StoreObj.OpenStore(); // 1 метод
StoreObj.GetCertCount(); // 2 метод


Второй метод не может работать, пока 1 не закончит свою работу. Так как он юзает переменную из 1 метода. А получается так, что из за Promise второй метод срабатывает быстрее первого.
Совмещать их нельзя!

Что можете посоветовать? Использование Promise в методах обязательно. Заранее спасибо!


Часовой пояс GMT +3, время: 07:27.