• 07-09-2022, 18:23:22
    #1
    Proxy listem var ve veri almak istediğim link var veriyi alınca döngüyü kırıp kaynağı bir değişkene aktarmak istiyorum ancak callback içerisinde break kullanamıyorum.
    çalıştırdığımda veriyi alıyor ancak döngü devam ediyor ve istediğimi yapamıyorum. kısaca response.body.includes("Your file is ready") koşulu içerisinde veriyi callback dışarısında bir değişkene atayıp döngüyü kırmak istiyorum ancak yapamadım araştırdım ancak yanıt da bulamadım. aşağıdaki linkten kodlara ulaşabilirsiniz.
    https://codeshare.io/N3YNlJ
  • 07-09-2022, 18:27:51
    #2
    Döngüyü kırmaktan kastınız döngüyü sonlandırmaksa return ile değeri geriye döndürün ve tüm işlemi bir arrow function içine alın.
  • 07-09-2022, 18:33:07
    #3
    Promise kullanabilirsiniz, kırmak istediğiniz noktada resolve kullanarak devam edebilirsiniz.
  • 07-09-2022, 19:07:02
    #4
    onurturali adlı üyeden alıntı: mesajı görüntüle
    Döngüyü kırmaktan kastınız döngüyü sonlandırmaksa return ile değeri geriye döndürün ve tüm işlemi bir arrow function içine alın.
    return content kısmında veri doğru şekilde geliyor ancak dışarı yine çıkmıyor let asd = func() konsola basınca Promise { <pending> } alıyorum break ile döngüyü kırabiliyorum ancak sadece for içerisindeki normal fonksiyonlarda işe yarıyor çözemedim bir türlü
    for (const proxy of data) {
        const kaynak = [];
        const func = async () => {
            let content = await arrow(proxy).then(data => {
                return data
            })
            return content
        }
        let asd = func()
        console.log(asd)
    }
  • 07-09-2022, 21:18:11
    #5
    for (const proxy of data) {  
    const kaynak = [];    
    const func = async () => {        
    let content = await arrow(proxy); //await ve then aynı anda kullanılmamalı. await zaten async fonksiyon çalışırken kodu bekletmeyi ve return'u değişkene atayabilmenizi sağlıyor.
    return content    
    }  
    let asd = await func(); // func fonksiyonu async olduğu için await ile bekleyip değişkene atamanız gerekiyor.
    console.log(asd) ;
    }
    Aşağıdaki şekillerde de kullanılabilir.
    const func = async () => {        
    return arrow(proxy);
    }
    func().then(data => { console.log(data); });
  • 07-09-2022, 23:37:44
    #6
    Dogukan adlı üyeden alıntı: mesajı görüntüle
    for (const proxy of data) {  
    const kaynak = [];    
    const func = async () => {        
    let content = await arrow(proxy); //await ve then aynı anda kullanılmamalı. await zaten async fonksiyon çalışırken kodu bekletmeyi ve return'u değişkene atayabilmenizi sağlıyor.
    return content    
    }  
    let asd = await func(); // func fonksiyonu async olduğu için await ile bekleyip değişkene atamanız gerekiyor.
    console.log(asd) ;
    }
    Aşağıdaki şekillerde de kullanılabilir.
    const func = async () => {        
    return arrow(proxy);
    }
    func().then(data => { console.log(data); });
    aşağıdaki kodlar çalışıyor istediğim veriyi getiriyor ancak döngü durmuyor görev yöneticisinden ağ kullanımına baktığımda hala isteklerin yapıldığını görüyorum.

    const arrow = async (proxy) => {
        return await new Promise(function(resolve, reject) {
            var agent = new HttpsProxyAgent('http://'+proxy)
        var proxyRequest = request.defaults({
            agent: agent,
            timeout: 5000,
            headers: {
                'user-agent': 'xxxxx'
            }
        })
        proxyRequest.get("xxxx", async function (error, response, body) {
            if(!error) {
                if(response.body.includes("Your file is ready")) {
                    resolve(body)
                }
            }
        })
        })
    }
    function getData(data) {
        return new Promise( function(resolve, reject) {
            data.forEach(async (proxy, index) => {
                let content = await arrow(proxy)
                if(content.includes("Your file is ready")) {
                    resolve(content)
                }
            })
        })
    }
    (async () => {
        let proxies = fs.readFileSync("proxies.txt", {encoding:'utf8', flag:'r'}).split(/\r?\n/)
        const subContent = await getData(proxies)
        console.log(subContent)
    })()
  • 07-09-2022, 23:42:48
    #7
    if(content.includes("Your file is ready")) {
    resolve(content)
    }
    Kodunu

    if(content.includes("Your file is ready")) {
    return resolve(content);
    }
    Şeklinde dener misin?
  • 07-09-2022, 23:46:13
    #8
    Dogukan adlı üyeden alıntı: mesajı görüntüle
    if(content.includes("Your file is ready")) {
    resolve(content)
    }
    Kodunu

    if(content.includes("Your file is ready")) {
    return resolve(content);
    }
    Şeklinde dener misin?
    bir değişiklik olmadı sabahtan beridir uğraşıyorum çözemedim bir türlü
  • 08-09-2022, 00:16:01
    #9
    WebKadir adlı üyeden alıntı: mesajı görüntüle
    bir değişiklik olmadı sabahtan beridir uğraşıyorum çözemedim bir türlü
    const arrow = async (proxy) => {
    return await new Promise(function(resolve, reject) {
    var agent = new HttpsProxyAgent('http://'+proxy);
    var proxyRequest = request.defaults({
    agent: agent,
    timeout: 5000,
    headers: {
    'user-agent': 'xxxxx'
    }
    });
    proxyRequest.get("xxxx", async function (error, response, body) {
    if(!error) {
    if(response.body.includes("Your file is ready")) {
    resolve(body)
    }
    }
    });
    });
    }
    const getData = async (data) => {
    return new Promise( function(resolve, reject) {
    for (let curProxy in data) {
    let content = await arrow(curProxy);
    if(content.includes("Your file is ready")) {
    return resolve(content);
    }
    }
    });
    }
    (async () => {
    let proxies = fs.readFileSync("proxies.txt", {encoding:'utf8', flag:'r'}).split(/\r?\n/)
    const subContent = await getData(proxies)
    console.log(subContent)
    })()
    Bunu dener misin?

    Muhtemelen data.forEach içinde çağırdığın fonksiyon async olduğu için forEach data içindeki bütün itemlar için aynı anda arrow fonksiyonunu çağırıyordu. Debug etme şansım olmadı ama çalışması gerekiyor.

    Eğer amacın teker teker denemesi değil, hepsini aynı anda çalıştırması ve bir tane geçerli proxy bulduğunda diğerlerini iptal etmesiyse farklı bir metod önereceğim.