Javascript 返回一个值,该值取决于JS函数的异步调用

Javascript 返回一个值,该值取决于JS函数的异步调用,javascript,asynchronous,callback,Javascript,Asynchronous,Callback,这里的关键是我希望我的函数返回我从另一个函数异步接收的值。 结构如下: const https = require('https'); function getNumPages(substr) { let totalPages = 0; console.log(`Before makeRequest ${totalPages}`); //0 makeRequest(substr,(numPages)=>{ console.log(`Inside

这里的关键是我希望我的函数返回我从另一个函数异步接收的值。 结构如下:

const https = require('https');

function getNumPages(substr) {
    let totalPages = 0;
    console.log(`Before makeRequest ${totalPages}`); //0

    makeRequest(substr,(numPages)=>{
        console.log(`Inside callback from makeRequest${numPages}`); //79

        totalPages = numPages;
    });

    console.log(`After makeRequest${totalPages}`); //0
    return totalPages;
}
让getNumPages返回来自makeRequest的值的最佳方法是什么。 我理解代码的异步性质,并且在makeRequest函数调用其回调之前执行返回值

我希望能够使用字符串调用getNumPages,比如getNumPages('Shakespeare'),makeRequest将调用API,获取数据库中Shakespeare的页数,然后getNumPages返回整数。
我知道在makeRequest的回调中,我有适当数量的页面,但如果我不想在那里工作,我只想从getNumPages返回它。

只需返回一个承诺,这是唯一的方法

但是。。。您可以使用async/await使其看起来像同步代码 无论如何,它只会在引擎盖下使用promise。但它的外观和行为将与您想要的一样(我认为)

您可以使用语法


可能重复的简言之,您无法同步返回该值。你能做的最好的事情就是回报你对价值的承诺。任何依赖于异步操作的操作本身都必须是异步的。
async function getNumPages(substr) => {
    const result = await makeRequest(substr);
    return result;
}