Задать вопрос
@TechNOIR

NODE.JS Почему данная async функция возвращает undefined?

Всем привет.

Подскажите пожалуйста.
Почему данная async функция возвращает undefined?
В функции находятся SRV и TXT записи и на выходе должна возвращаться ссылка и public key.
Помогите разобраться пожалуйста. Спасибо заранее

Код:
import dnsResolver from 'dns';
import util from 'util';
import mem from 'mem';

const dnsResolveSRV = util.promisify(dnsResolver.resolveSrv);
const dnsResolveTXT = util.promisify(dnsResolver.resolveTxt);

const cacheMaxAge = 3600000; // one hour
const memoizedDnsResolveSRV = mem(dnsResolveSRV, { maxAge: cacheMaxAge });
const memoizedDnsResolveTXT = mem(dnsResolveTXT, { maxAge: cacheMaxAge });

export async function search(peerDomain) {
	console.log(`search: peerDomain=${peerDomain}`);

	let srvEntries = [];
	let protocol = '';

	try {
		console.log(`search: peerDomain=${peerDomain} srv=_myservice._https.${peerDomain}`);
		srvEntries = await memoizedDnsResolveSRV(`_myservice._https.${peerDomain}`);
		protocol = 'https';
	} catch (err) {
        console.log(err);
	}

	const [srvEntry] = srvEntries;

	let publicKey = null;
	try {
		console.log(`search: peerDomain=${peerDomain} txt=myservice-public-key.${peerDomain}`);
		const publicKeyTxtRecords = await memoizedDnsResolveTXT(`myservice-public-key.${peerDomain}`);
		publicKey = publicKeyTxtRecords[0].join('');
	} catch (err) {
		console.log(err);
	}

	console.log({ msg: 'search: found', peerDomain, srvEntry, protocol });
// если сделать console.log(`${protocol}://${srvEntry.name}:${srvEntry.port}`) до return то все значения есть
	return {
		url: `${protocol}://${srvEntry.name}:${srvEntry.port}`,
		publicKey,
	};
}
const { url: baseUrl, publicKey } = search('domain.ru');

console.log(baseUrl);
console.log(publicKey);
  • Вопрос задан
  • 99 просмотров
Подписаться 1 Простой 4 комментария
Пригласить эксперта
Ответы на вопрос 1
@ARSG15Remix
const { url: baseUrl, publicKey } = search('domain.ru'); тут вы присвоили константу к вызыву асинхронной функции, и когда эта константа присвоила значения не доздавшись его завершения. Что бы сказать константу что бы он дождался завершения то нужно использовать ключевое слово "await" перед функцией, в таком случае код должен выглядеть примерно так:
const { url: baseUrl, publicKey } = await search('domain.ru');
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы