2017-08-25 23 views
5

Tôi đang sử dụng mô-đun request-promise để kiểm tra xem trang web có hoạt động với proxy hay không. Tôi đang cố gắng tìm các proxy đủ nhanh để trả lời trong 5 giây. Vì vậy, tôi chỉ thêm đối tượng nếu yêu cầu không hết thời gian chờ trong 5 giây.Hứa hẹn ngay cả khi nó được giải quyết

Đối với một số proxy, mặc dù lời hứa đã được giải quyết, tập lệnh nút bị treo trong một thời gian. Tôi không thể tìm ra lý do của sự chậm trễ này. Tôi thấy rằng nó in Done nhưng nó bị treo. Sau 1 phút 10 giây sau, kịch bản thoát. Đây có phải là do mã của tôi, hoặc vấn đề hệ điều hành cho ổ cắm mở vv?

const rp = require('request-promise'); 
const testProxies = [ 
    { 
     "ipAddress": "80.241.219.83", 
     "port": 3128, 
    }, 
    { 
     "ipAddress": "45.55.27.246", 
     "port": 80 
    }, 
    { 
     "ipAddress": "144.217.197.71", 
     "port": 8080, 
    }, 
    { 
     "ipAddress": "104.131.168.255", 
     "port": 80, 
    }, 
    ]; 

function CheckSites(sitesArray,site) { 
    let ps = []; 
    for (let i = 0; i < sitesArray.length; i++) { 
     let proxy = sitesArray[i]; 

     let ops = { 
      method: 'GET', 
      resolveWithFullResponse: true, 
      proxy: 'http://' + proxy.ipAddress + ':' + proxy.port, 
      uri:site, 
     }; 
     let resp = rp.get(ops); 
     ps.push(resp); 
    } 
    return Promise.all(ps.map(function (p) { 
     p.time = Date.now(); 
     return p 
      .then(function (a) { 
       return {'header':a.headers,'time':Date.now() - p.time}; 
      }) 
      .timeout(5000) 
      .catch(function (e) { 
       return {}; 
      }) 
    })) 
} 
CheckSites(testProxies,'https://www.example.com').then(function (object) { 
    console.log('Done!'); 
    console.log(object); 
}).catch(function (err) { 
    console.log('Exception: ' + err); 
}); 

Trả lời

1

Đối với trường hợp sử dụng của bạn tôi khuyên bạn nên sử dụng Promise.race() nó cư xử như Promise.all nhưng bạn sẽ có được gọi lại càng sớm càng proxy nhanh nhất đáp ứng.

Tôi đã điều tra thêm về các lỗi, và nó có vẻ là a request module issue, khi bạn sử dụng thời gian chờ, họ chỉ không đóng kết nối và nó trong hang-up bang

+0

Tôi bị 'Xong! 'trên bảng điều khiển. Nó có nghĩa là tất cả các lời hứa được giải quyết. Cũng ngay cả với 'Promise.race()' nó vẫn treo trong một thời gian sau đó kịch bản thoát – Meanteacher

+0

@Meanteacher Tôi cập nhật câu trả lời của tôi dường như yêu cầu lỗi mô-đun, vào thời gian chờ https://github.com/request/request/issues/1676 họ không đóng kết nối. –

+0

Tôi đã kiểm tra liên kết của bạn liên kết đến một vấn đề khác. Tuy nhiên, người dùng đó nói rằng đó là lỗi trên mã của anh ta. Tôi vẫn không thể hiểu được lý do. Dù sao cũng cảm ơn bạn. – Meanteacher

Các vấn đề liên quan