v2.5.2
Giriş yap

Döngü işleminden sonra fonksiyon çalıştırma

trsherlock
977 defa görüntülendi

Arkadaşlar aşağıda fatura sorgulama işlemi yaptırıyorum.
İşlem bittikten sonra da oturum kapansın istiyorum.
Fatura sorgulama işleminde bir ayın tamamını sorgulamak için 7 günlük bir parçalama işlemi yapmak gerekiyor.
Parçalama işlemi sorgulama işlemi her şey hazır.
Döngü başlamadan oturum kapatma işlemi yapıldığı için hata alıyorum.
Döngüsü bittikten sonra oturum kapatma fonksiyonunu çalıştırdığım zaman bazen çakışma yaşanabiliyor.

    var request = require("request");
    
    request(tokenOpt, function (error, response, body) {
    if (error) throw new Error(error);
    tokenId = JSON.parse(body).token;
    /* BU DÖNGÜ BİTTİKTEN SONRA OTURUM KAPANMALI */
    for (var key in zaman[ay]) {
        faturaTarihBas = yil + "-" + ay.toString().padStart(2, 0) + "-" + zaman[ay][key][0];
        faturaTarihSon = yil + "-" + ay.toString().padStart(2, 0) + "-" + zaman[ay][key][1];
        jp = {faturaTarihBas: faturaTarihBas,textBox: "",faturaTarihSon: faturaTarihSon}
        let faturaOpt = {
            method: 'POST', url: 'https://ivd.gib.gov.tr/tvd_server/dispatch',
            qs: { cmd: 'EFaturaIslemleri_eFaturaGoruntuleSorgula', callid: callid(), pageName: 'P_EFATURA', token: tokenId, jp: JSON.stringify(jp) },
        };
        setTimeout(function () {
            faturaSorgula(faturaOpt)
        }, 1000 * key);
    }
    /* BU DÖNGÜ BİTTİKTEN SONRA OTURUM KAPANMALI */
});
function faturaSorgula(faturaOpt) {
    request(faturaOpt, function (error, response, body) {
        if (error) throw new Error(error);
        for (var i = 0; i < JSON.parse(body)["data"]["FATURASONUC"].length; i++) {
            console.log(JSON.parse(body)["data"]["FATURASONUC"][i])
        }
    })
};
function oturumKapat(tokenId) {
    var kapatOpt = {
        method: 'POST',url: 'https://ivd.gib.gov.tr/tvd_server/dispatch',
        qs:{ cmd: 'kullaniciBilgileriService_logout', callid: callid(), pageName: 'PG_MAIN_DYNAMIC', token: tokenId, jp: '{}', }
    }
    request(kapatOpt, function (error, response, body) {
        if (error) throw new Error(error);
        console.log(body);
    })
};
Cevap yaz
Cevaplar (4)
trsherlock
1375 gün önce

Aşağıdaki gibi kullanınca çalıştı şimdilik sorun yok gibi :)

    function tokenAl(tokenOpt) {
    request(tokenOpt, function (error, response, body) {
        if (error) throw new Error(error);
        tokenId = JSON.parse(body).token;

        for (let key in zaman[ay]) {
            faturaTarihBas = yil + "-" + ay.toString().padStart(2, 0) + "-" + zaman[ay][key][0];
            faturaTarihSon = yil + "-" + ay.toString().padStart(2, 0) + "-" + zaman[ay][key][1];
            let jp = { faturaTarihBas: faturaTarihBas, textBox: "", faturaTarihSon: faturaTarihSon }

            faturaSorgula(tokenId, jp)
            
            setTimeout(function () {
                if (key == Object.keys(zaman[ay]).length) {
                    oturumKapat(tokenId)
                }

            }, key * 300);
        };
    });
}
mk148a
966 gün önce

Hocam merhaba,
ivd için girişi nasıl yapıyorsunuz? Ben de benzer bir proje üzerinde çalışıyorum, fakat servisler için dökümantasyon bulamadım hiç

trsherlock
1375 gün önce

Merhaba cevabın için teşekkür ederim. Konuları araştıracağım. İşlemleri nodejs ile yapmaya çalışıyorum.
Ajax ile yaptığımda token bilgisi alırken aşağıdaki hatayı alınca.
Önce php curl denedim çalıştı. Fakat bana gereken javascript veya nodejs üzerinde çalışabilen olması.
Sonunda nodejs > request ile başarılı bir sorgu alabildim.

Access to XMLHttpRequest at 'postUrl' from origin 'http://localhost' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.

zafer
1375 gün önce

Merhaba trsherlock,

Kodlardan anladığım kadarıyla ajax üzerinden sorgulama yapıyorsun. request olanağı ile daha önce çalışmadım ben ajax işlemleri için fetchAPI sistemini tercih ediyorum. Bence FetchAPI ile çok daha temiz bir kodlama yapabilirsin. İncelemeni tavsiye ederim.

Anladığım kadarıyla eş zamansız (asenkron) işlemler yaptığın için oturum kapatma işleminde bazen çakışmalar olabiliyor. Çünkü yazılım oturumKapat işlevini çağırırken arkaplanda sorgu işlemi henüz tamamlanmamış olabiliyor. Callback mekanizmasını kullanarak son yaptığın işlemden sonra oturumu kapatırsan çakışma sorunu yaşamazsın diye düşünüyorum.