Javascript 异步调用,fetch不等待完成,然后立即转到

Javascript 异步调用,fetch不等待完成,然后立即转到,javascript,asynchronous,fetch,Javascript,Asynchronous,Fetch,我正在尝试一个接一个地对两个函数的运行进行排序 下面的代码正确地计算页面,但不向其调用者返回任何内容 const rp = require('request-promise'); const cheerio = require('cheerio'); const fetch = require('node-fetch'); async function getNumberOfPages(url) { const pageUrl = url + "1"; rp(pageUrl)

我正在尝试一个接一个地对两个函数的运行进行排序

下面的代码正确地计算页面,但不向其调用者返回任何内容

const rp = require('request-promise');
const cheerio = require('cheerio');
const fetch = require('node-fetch');

async function getNumberOfPages(url) {

    const pageUrl = url + "1";
    rp(pageUrl)
    .then(function(html) {
        return fetch(pageUrl)
        .then(response => response.text())
        .then(html => {
            const entriesPerPage = 20;
            const $ = cheerio.load(html);
            let totalEntries = $(".Aa").first().text()
            let pagesNumber = Math.ceil(totalEntries / entriesPerPage);
            return pagesNumber;
            })
        })
}
实际上,调用者立即在B)中输入,控制台日志是“Number pages:undefined”

我不明白为什么。看来我应该去拿些东西,但不知道怎么做

另外,想知道是否有必要将
rp
fetch
一起使用,似乎只有一个就足够了


谢谢

getNumberOfPages
结束时没有返回任何内容,因此它返回一个解析为
未定义的承诺

您需要显式地返回一些内容

async function getNumberOfPages(url) {
    const pageUrl = url + "1";
    return rp(pageUrl)
    // etc
但是,现在,您在任何时候都不使用
wait
返回承诺。因此,使用
async
关键字是毫无意义的

function getNumberOfPages(url) {
    const pageUrl = url + "1";
    return rp(pageUrl)
    // etc
或者,您可以重写函数以使用
wait

async function getNumberOfPages(url) {
    const pageUrl = url + "1";
    const value_never_used = await rp(pageUrl);
    const response = await fetch(pageUrl);
    const html = await response.text();
    const entriesPerPage = 20;
    const $ = cheerio.load(html);
    let totalEntries = $(".Aa").first().text();
    let pagesNumber = Math.ceil(totalEntries / entriesPerPage);
    return pagesNumber;
}

使用
请求承诺
节点获取
没有任何意义,因此
值\u从未使用过

非常感谢!我接受了你的第一次反馈,并用它修复了我的代码,但你的第二部分肯定更有用。也谢谢你花时间解释和重写,干杯!
async function getNumberOfPages(url) {
    const pageUrl = url + "1";
    const value_never_used = await rp(pageUrl);
    const response = await fetch(pageUrl);
    const html = await response.text();
    const entriesPerPage = 20;
    const $ = cheerio.load(html);
    let totalEntries = $(".Aa").first().text();
    let pagesNumber = Math.ceil(totalEntries / entriesPerPage);
    return pagesNumber;
}