Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/74.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
Javascript 如何使axios.com实现同步?_Javascript_Jquery_Node.js_Axios_Cheerio - Fatal编程技术网

Javascript 如何使axios.com实现同步?

Javascript 如何使axios.com实现同步?,javascript,jquery,node.js,axios,cheerio,Javascript,Jquery,Node.js,Axios,Cheerio,这是我的nodejs代码,用于1337x.to刮板。我想做的是首先scrape搜索结果运行良好,然后从这些搜索结果中获得torrents的url和scrape磁铁url链接,这似乎是一个不同的功能,但当我尝试scrapegetTorrent函数中的那些值时,它只是返回了未定义的值,我似乎无法存储这些值。有人能帮我吗?我只需要在返回之前将磁铁链接存储在阵列中 代码如下: const axios = require('axios') const cheerio = require('cheerio'

这是我的nodejs代码,用于1337x.to刮板。我想做的是首先scrape搜索结果运行良好,然后从这些搜索结果中获得torrents的url和scrape磁铁url链接,这似乎是一个不同的功能,但当我尝试scrapegetTorrent函数中的那些值时,它只是返回了未定义的值,我似乎无法存储这些值。有人能帮我吗?我只需要在返回之前将磁铁链接存储在阵列中

代码如下:

const axios = require('axios')
const cheerio = require('cheerio')

const baseurl = 'https://1337x.to'


var magneturl = 'sdkllfklajds'

var arr = []
var nameList = []
var urlList = []
var seedList = []
var leechList = []
var dateList = []
var sizeList = []

const getMagnet = (torurl) => {
    axios.get(torurl).then(({data}) => {
        var $ = cheerio.load(data)
        $ = cheerio.load($('.dropdown-menu').html())
        magneturl = $('a').last().attr('href')
    })
    return magneturl
}

const getTorrent = (searchurl) => {
    axios.get(searchurl).then(({ data }) => {
        const $ = cheerio.load(data)

        $('.coll-1.name').each((index, element) => {

            var tag = $(element).children('a').last()
            var name = tag.text()
            var url = tag.attr('href')

            getMagnet(url).then((data) => {
                urlList.push(data)
            })

            if(name.length) {
                nameList.push(name)
                //urlList.push(url)
            }
        })

        $('.coll-2').each((index, element) => {
            var seeds = $(element).text()
            if(index > 0)
                seedList.push(seeds)
        })

        
        $('.coll-3').each((index, element) => {
            var leeches = $(element).text()
            if(index > 0)
                leechList.push(leeches)
        })

        
        $('.coll-date').each((index, element) => {
            var dateAdded = $(element).text()
            if(index > 0)
                dateList.push(dateAdded)
        })

        
        $('.coll-4.size').each((index, element) => {
            var size = $(element).text().replace($(element).children('span').text(), '')
            sizeList.push(size)
        })

        var i = 0

        while(i < 20) {
            arr.push({name: nameList[i], url: baseurl + urlList[i], seeds: seedList[i], leeches: leechList[i], dateAdded: dateList[i], size: sizeList[i]})
            i = i + 1
        }
    
    })
    return arr
}

module.exports = {getTorrent, getMagnet}
const axios=require('axios'))
const cheerio=require('cheerio')
常量baseurl=https://1337x.to'
var magneturl='sdkllfklajds'
var arr=[]
变量名称列表=[]
var urlist=[]
var seedList=[]
变量leechList=[]
var dateList=[]
变量sizeList=[]
常量getMagnet=(torurl)=>{
get(torurl).then({data})=>{
var$=cheerio.load(数据)
$=cheerio.load($('.dropdown menu').html())
magneturl=$('a').last().attr('href'))
})
返回magneturl
}
常量getTorrent=(搜索URL)=>{
get(searchurl).then({data})=>{
const$=cheerio.load(数据)
$('.coll-1.name')。每个((索引,元素)=>{
var标记=$(元素).children('a').last()
var name=tag.text()
var url=tag.attr('href')
getMagnet(url)。然后((数据)=>{
urlList.push(数据)
})
如果(名称、长度){
名称列表。推送(名称)
//推送(url)
}
})
$('.coll-2')。每个((索引,元素)=>{
var seeds=$(元素).text()
如果(索引>0)
种子列表。推送(种子)
})
$('.coll-3')。每个((索引,元素)=>{
var leeches=$(元素).text()
如果(索引>0)
水蛭列表。推(水蛭)
})
$('.coll date')。每个((索引,元素)=>{
var dateAdded=$(元素).text()
如果(索引>0)
dateList.push(已添加日期)
})
$('.coll-4.size')。每个((索引,元素)=>{
变量大小=$(元素).text().replace($(元素).children('span').text(),'')
sizeList.push(大小)
})
变量i=0
而(i<20){
arr.push({name:nameList[i],url:baseurl+urrlist[i],seeds:seedList[i],leeches:leechList[i],dateAdded:dateList[i],size:sizeList[i]})
i=i+1
}
})
返回arr
}
module.exports={getTorrent,getMagnet}

您正在加倍然后/等待。使用
wait
时,您可以执行以下操作:

const getMagnet=async(torurl)=>{
var data=await axios.get(torurl)
var$=cheerio.load(数据)
$=cheerio.load($('.dropdown menu').html())
magneturl=$('a').last().attr('href'))
返回magneturl
}
基本上是直接使用
wait
的返回,而不是在
then
中。在代码的其他地方也有同样的东西


我认为,如果您像这样清理代码,您可以在承诺中解开承诺,这可能会解决您的问题。

我的问题在于这段代码,但我也会尝试更改它。尝试过这一点,现在它正在返回一个待定的承诺。async()=>{await axios.get(url).然后({data})=>{var getdata=cheerio.load(data)getdata=cheerio.load(getdata('.dropdown menu').html())urlist.push(getdata('a').last().attr('href'))}您应该真正了解async/await。使用它们的目的是使包含承诺的代码更具可读性。您甚至在承诺中使用了async/await(
then
),而最好只使用1种承诺编码。可以使用async/await,也可以使用
then
,记住在
then
中,您还可以返回新的承诺。让我编辑代码并重试。我会编辑上面的代码,所以一定要检查,因为我认为这不会解决我的问题。getMagnet代码放在getTorrent代码中时,无法正常工作。我很快就要放弃nodejs了。我在这个问题上纠缠了好几天,没有找到真正的解决办法。getMagnet函数必须是单独的,或者其代码必须写入getTorrent函数中。我都试过了,但我得到的只是一个又一个的承诺。我有勇气在没有磁铁的情况下工作,但没有磁铁是没有用的。