Я пытаюсь расширить мост telegram-rocket.chat и для этого нужно вызвать apis. Для этого rocket.chat предоставляет оболочку Meteor.js с именем HTTP.
Этот фрагмент кода представляет собой исходящий хук, который обрабатывает сообщение, отправленное пользователем, позволяет мне преобразовать сообщение и передать измененный текст.
prepare_outgoing_request ({request}) вызывается хуком rocket.chat, и я хотел бы вызвать в нем API, который разрешает коды смайликов в соответствии с действующим символом смайликов: ": see_no_evil: to ?"
/** Global Helpers
*
* console - A normal console instance
* _ - An underscore instance
* s - An underscore string instance
* HTTP - The Meteor HTTP object to do sync http calls
* https://docs.meteor.com/api/http.html
*/
class Script {
request_emojitext(emoji_code) {
console.log(`called: request_emojitext('${emoji_code}')`);
const url = `https://www.emojidex.com/api/v1/emoji/${emoji_code}`;
const response = HTTP.call('GET', url);
console.log(`Emoji Response: ${response.constructor.name} => ${JSON.stringify(response)}`);
// Emoji Response: Object => {"error":{}}
return response;
}
/**
request.params {object}
request.method {string}
request.url {string}
request.headers {object}
*/
prepare_outgoing_request({ request }) {
const emojiResponse = this.request_emojitext('see_no_evil');
const emojiCharacter = emojiResponse.content.emoji;
return {
// https://core.telegram.org/bots/api
url: `${request.url}&text=${emojiCharacter}`,
method: 'GET'
};
}
}
Документация Meteor гласит:
// Asynchronous call
Meteor.call('foo', 1, 2, (error, result) => { ... });
// Synchronous call
const result = Meteor.call('foo', 1, 2);
/*
On the client, if you do not pass a callback and you are not
inside a stub, call will return undefined, and you will have
no way to get the return value of the method. That is because
the client doesn’t have fibers, so there is not actually any
way it can block on the remote execution of a method.
*/
Я не уверен, как действовать дальше, поскольку мне пока не совсем комфортно с асинхронным программированием. Как бы я заблокировал, пока результат фактически не стал доступен, или есть другой способ сделать это, которого я полностью пропускаю?