Как получить возвращаемое значение из функции-заглушки? - PullRequest
0 голосов
/ 13 июля 2020

Используя grp c, я создаю заглушку «клиент». У него есть метод авторизации. Я называю это

client.auth({uuid:cookies.uuid}, function(err, r){} );

Функция в параметре будет вызываться асинхронно, но мне нужно получить ее значение синхронно. Как это сделать?

Ответы [ 2 ]

0 голосов
/ 13 июля 2020

Невозможно преобразовать асинхронный метод в синхронный. Вы можете "смоделировать" это ваниль с помощью async/await и обещаний без какого-либо внешнего пакета.

function clientLogin() {
    return new Promise((accept, reject) => {
        client.auth({uuid:cookies.uuid}, (err, r){
            if (err) {
                reject(err);
            } else {
                accept(r);
            }
        });
    });
}

// This code needs to run inside and async function
try {
    let r = await clientLogin();
    console.log(r);
} catch (e) {
    console.error(e);
}

clientLogin() возвращает Promise, который будет разрешен позже в будущем (АКА асинхронный). С помощью ключевого слова await вы можете указать JavaScript дождаться разрешения Promise перед продолжением выполнения, так что это симулированный синхронный код, хотя на самом деле он не синхронизирован.

Если вы не используется для async/await, объяснять немного долго, поэтому лучше поищите учебник.

0 голосов
/ 13 июля 2020

Это асинхронная операция. Вы не можете завершить его синхронно. Вы можете использовать такую ​​библиотеку, как grp c -promise или grp c -caller , чтобы получить обещание, а затем использовать await, чтобы иметь возможность кодировать аналогичный стиль синхронного кода.

...