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
Node.js döngüyü callback fonksiyonu içerisinde kırma r10+
9
●180
- 07-09-2022, 18:27:51Dö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, 19:07:02return 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üonurturali adlı üyeden alıntı: mesajı görüntüle
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
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:44aş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.Dogukan adlı üyeden alıntı: mesajı görüntüle
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:46:13bir değişiklik olmadı sabahtan beridir uğraşıyorum çözemedim bir türlüDogukan adlı üyeden alıntı: mesajı görüntüle
- 08-09-2022, 00:16:01WebKadir adlı üyeden alıntı: mesajı görüntüle
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.
