Возврат значения, которое зависит от асинхронного вызова из функции JS - PullRequest
0 голосов
/ 19 мая 2018

Ключевым моментом здесь является то, что я хочу, чтобы моя функция возвращала значение, которое я получаю асинхронно от другой функции.Вот структура:

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, получит количество страниц Шекспира в БД, а затем getNumPages, чтобы вернуть целое число.Я знаю, что внутри функции обратного вызова makeRequest у меня есть правильное количество страниц, но я говорю, что не хочу там работать, я просто хочу вернуть его из getNumPages.

Ответы [ 2 ]

0 голосов
/ 19 мая 2018

Вы можете использовать async / await синтаксис

async function getNumPages(substr) => {
    const result = await makeRequest(substr);
    return result;
}
0 голосов
/ 19 мая 2018

просто верните обещание, это единственный способ.

, но ... Вы можете сделать его похожим на синхронный код, используя async / await, он все равно будет использовать обещание под капотом.но он будет выглядеть и вести себя так, как вы хотите (я думаю)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...