Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 检查异步函数是否有随机循环完成 我正在做一个简单的任务,从一个网站上获取一些数据,然后在另一个网站上进行检查,因此我成功地获取了数据,并创建了一个循环来检查数据的每个值,但问题是因为nodejs发送了所有请求,然后得到了响应。我做得很糟糕 索引的排列方式不正确,这意味着当我检查控制台中的I值时,有时会变为55,然后变为2,然后变为26,然后变为5-因此我无法检查循环是否由索引完成 检查条件变得随机,因此无法捕获是否已完成并将所有结果推送到数组中 每次条件为真时,它都会给我数组的结果,但我不想这样,我想在检查完所有内容后得到数组中的所有结果-我试图检查循环外的数组结果,但它只从数据中得到4或5,有时什么都不给我,因为所有请求已发送,循环已完成,我正在等待响应,因此无法找到检查是否已收到所有响应的正确方法_Node.js_Web Scraping_Async Await_Request - Fatal编程技术网

Node.js 检查异步函数是否有随机循环完成 我正在做一个简单的任务,从一个网站上获取一些数据,然后在另一个网站上进行检查,因此我成功地获取了数据,并创建了一个循环来检查数据的每个值,但问题是因为nodejs发送了所有请求,然后得到了响应。我做得很糟糕 索引的排列方式不正确,这意味着当我检查控制台中的I值时,有时会变为55,然后变为2,然后变为26,然后变为5-因此我无法检查循环是否由索引完成 检查条件变得随机,因此无法捕获是否已完成并将所有结果推送到数组中 每次条件为真时,它都会给我数组的结果,但我不想这样,我想在检查完所有内容后得到数组中的所有结果-我试图检查循环外的数组结果,但它只从数据中得到4或5,有时什么都不给我,因为所有请求已发送,循环已完成,我正在等待响应,因此无法找到检查是否已收到所有响应的正确方法

Node.js 检查异步函数是否有随机循环完成 我正在做一个简单的任务,从一个网站上获取一些数据,然后在另一个网站上进行检查,因此我成功地获取了数据,并创建了一个循环来检查数据的每个值,但问题是因为nodejs发送了所有请求,然后得到了响应。我做得很糟糕 索引的排列方式不正确,这意味着当我检查控制台中的I值时,有时会变为55,然后变为2,然后变为26,然后变为5-因此我无法检查循环是否由索引完成 检查条件变得随机,因此无法捕获是否已完成并将所有结果推送到数组中 每次条件为真时,它都会给我数组的结果,但我不想这样,我想在检查完所有内容后得到数组中的所有结果-我试图检查循环外的数组结果,但它只从数据中得到4或5,有时什么都不给我,因为所有请求已发送,循环已完成,我正在等待响应,因此无法找到检查是否已收到所有响应的正确方法,node.js,web-scraping,async-await,request,Node.js,Web Scraping,Async Await,Request,这是我的密码 consthttp=require(“http”); 常数r=要求(“请求”); const$=require(“jquery jsdom”); var-arr=[]; let data_list_req=函数(){ 返回新承诺((解决、拒绝)=>{ r({ //从这个url获取数据 url:“https://example.com/", 方法:“获取” },函数(err、resp、htm){ 解析(htm) }) }) } 数据列表请求()。然后((响应)=>{ 让tr=$($(

这是我的密码

consthttp=require(“http”);
常数r=要求(“请求”);
const$=require(“jquery jsdom”);
var-arr=[];
let data_list_req=函数(){
返回新承诺((解决、拒绝)=>{
r({
//从这个url获取数据
url:“https://example.com/",
方法:“获取”
},函数(err、resp、htm){
解析(htm)
})
})
}
数据列表请求()。然后((响应)=>{
让tr=$($(response.find(“table”)[0]).html()).find(“tr”);
让data1_list=tr.find(“td:nth-child(2)”;
var data2_list=tr.find(“td:nth child(1)”;
for(设i=0,q=0;i{
r({
url:result_页面,
方法:“张贴”,
表格数据:{
“列表”:数据2_列表[i]。innerHTML+“:文本”
}
},函数(err、resp、htm){
解析(htm)
})
})
}
检查()。然后((响应)=>{
让代理检查=函数(){
返回新承诺((解决、拒绝)=>{
var code=$($(resp).find(“table”).html().find(“tr”)[1].getAttribute(“code”);
控制台日志(代码);
console.log(data2_list[i].innerHTML+“:text”)
//最后一步检查数据
r({
url:“http://example.com/checkdata.php?data=“+data2_列表[i]。innerHTML+”:“+data1_列表[q]。innerHTML+”&code=“+code,
方法:“获取”
},函数(err、resp、htm){
解决(htm);
})
})
}
代理检查()。然后((已检查)=>{
//资料
让first_data=$(选中)。查找(“td”)[“prevObject”][1]。innerHTML;
让第二个数据=$(选中)。查找(“td”)[“prevObject”][2]。innerHTML;
让我们检查_status=$(已检查)。查找(“td”)[“prevObject”][3]。innerHTML;
日志(第一个数据+“:”+第二个数据)
console.log(检查\u状态)
如果(检查_状态==“工作”){
arr.push(第一个数据+”:“+第二个数据)
控制台日志(arr)
}
})
})  
}
}
})

您需要创建一个变量
requests
,该变量维护代码已提交到事件循环的承诺计数,并且一旦承诺解决,您需要减少
请求的计数。一旦计数变为零,您就可以解决承诺

比如说-

const http = require("http");
const r = require("request");
const $ = require("jquery-jsdom");
var arr = [];
let requests = 0;
let data_list_req = function() {
    return new Promise((resolve, reject) => {
        r({
            //get the data from this url
            url: "https://example.com/",
            method: "GET"
        }, function(err,resp,htm) {
            resolve(htm)
        })
    })
}
const data = await new Promise(function (resolve, reject) {
    data_list_req().then((response) => {
        let tr =  $($($(response).find("table")[0]).html()).find("tr");
        let data1_list =  tr.find("td:nth-child(2)");
        var data2_list =  tr.find("td:nth-child(1)");
        for(let i = 0, q = 0; i < data2_list.length, q < data1_list.length; i++, q++) {
         if (data1_list[q].innerHTML == "text") {
            //second step get the data code
            requests++;
            let result_page =  "http://example.com/code.php";
            let check =  function() {
                return new Promise( (resolve, reject) => {
                    r({
                        url: result_page,
                        method: "POST",
                        formData: {
                            "list": data2_list[i].innerHTML+":text"
                        }
                    },  function(err,resp,htm) {
                        resolve(htm)
                    })
                })
            }
            check().then((resp) => {
                let proxy_check =  function() {
                    return new Promise( (resolve, reject) => {
                        var code =  $($(resp).find("table").html()).find("tr")[1].getAttribute("code");
                         console.log(code);
                         console.log(data2_list[i].innerHTML+":text")
                         //last step checking the data
                        r({
                            url:  "http://example.com/checkdata.php?data="+data2_list[i].innerHTML+":"+data1_list[q].innerHTML+"&code="+code,
                            method: "GET"
                        },  function(err,resp,htm) {
                             resolve(htm);
                        })
                    })
                }
                proxy_check().then( (checked) => {
                    //data
                requests--;
                    let first_data =  $(checked).find("td")["prevObject"][1].innerHTML;
                    let second_data =  $(checked).find("td")["prevObject"][2].innerHTML;
                    let check_status =  $(checked).find("td")["prevObject"][3].innerHTML;
                     console.log(first_data+":"+second_data)
                     console.log(check_status)
                    if (check_status == "working") {
                        arr.push(first_data+":"+second_data)
                        console.log(arr)
                    }
                    if(requests === 0){
                        resolve(arr);               
                    }
                })
            })  
        }
        }
    })
}
consthttp=require(“http”);
常数r=要求(“请求”);
const$=require(“jquery jsdom”);
var-arr=[];
让请求=0;
let data_list_req=函数(){
返回新承诺((解决、拒绝)=>{
r({
//从这个url获取数据
url:“https://example.com/",
方法:“获取”
},函数(err、resp、htm){
解析(htm)
})
})
}
常量数据=等待新承诺(函数(解析、拒绝){
数据列表请求()。然后((响应)=>{
让tr=$($(response.find(“table”)[0]).html()).find(“tr”);
让data1_list=tr.find(“td:nth-child(2)”;
var data2_list=tr.find(“td:nth child(1)”;
for(设i=0,q=0;i{
r({
url:result_页面,
方法:“张贴”,
表格数据:{
“列表”:数据2_列表[i]。innerHTML+“:文本”
}
},函数(err、resp、htm){
解析(htm)
})
})
}
检查()。然后((响应)=>{
让代理检查=函数(){
返回新承诺((解决、拒绝)=>{
变量代码=$($(分别)。
const http = require("http");
const r = require("request");
const $ = require("jquery-jsdom");
var arr = [];
let requests = 0;
let data_list_req = function() {
    return new Promise((resolve, reject) => {
        r({
            //get the data from this url
            url: "https://example.com/",
            method: "GET"
        }, function(err,resp,htm) {
            resolve(htm)
        })
    })
}
const data = await new Promise(function (resolve, reject) {
    data_list_req().then((response) => {
        let tr =  $($($(response).find("table")[0]).html()).find("tr");
        let data1_list =  tr.find("td:nth-child(2)");
        var data2_list =  tr.find("td:nth-child(1)");
        for(let i = 0, q = 0; i < data2_list.length, q < data1_list.length; i++, q++) {
         if (data1_list[q].innerHTML == "text") {
            //second step get the data code
            requests++;
            let result_page =  "http://example.com/code.php";
            let check =  function() {
                return new Promise( (resolve, reject) => {
                    r({
                        url: result_page,
                        method: "POST",
                        formData: {
                            "list": data2_list[i].innerHTML+":text"
                        }
                    },  function(err,resp,htm) {
                        resolve(htm)
                    })
                })
            }
            check().then((resp) => {
                let proxy_check =  function() {
                    return new Promise( (resolve, reject) => {
                        var code =  $($(resp).find("table").html()).find("tr")[1].getAttribute("code");
                         console.log(code);
                         console.log(data2_list[i].innerHTML+":text")
                         //last step checking the data
                        r({
                            url:  "http://example.com/checkdata.php?data="+data2_list[i].innerHTML+":"+data1_list[q].innerHTML+"&code="+code,
                            method: "GET"
                        },  function(err,resp,htm) {
                             resolve(htm);
                        })
                    })
                }
                proxy_check().then( (checked) => {
                    //data
                requests--;
                    let first_data =  $(checked).find("td")["prevObject"][1].innerHTML;
                    let second_data =  $(checked).find("td")["prevObject"][2].innerHTML;
                    let check_status =  $(checked).find("td")["prevObject"][3].innerHTML;
                     console.log(first_data+":"+second_data)
                     console.log(check_status)
                    if (check_status == "working") {
                        arr.push(first_data+":"+second_data)
                        console.log(arr)
                    }
                    if(requests === 0){
                        resolve(arr);               
                    }
                })
            })  
        }
        }
    })
}