В моем приложении Node.js я пытаюсь создать список всех индексов Elasticsearch и отправьте этот список как JSON в мое угловое приложение. Я использую модуль Elasticsearch.js:
npm install elasticsearch
const elasticsearch = require('elasticsearch');
const client = new elasticsearch.Client({
host: 'localhost:9200',
log: 'trace'
});
Затем, в моем обращении маршрута API Boot API, я пинговая elasticsearch, и запустил запрос, который предполагает вернуть все индексы:
indexRoutes.route('/').get(function (req, res) {
client.ping({
requestTimeout: 30000,
}, function (error) {
if (error) {
console.error('elasticsearch cluster is down!');
} else {
console.log('All is well');
client.cat.indices({format: 'json'})
.then(console.log(index));
}
});
});
Я предполагаю, что, когда обещание будет решено, от него возвращается объект, поэтому я ссылаюсь на этот объект как «индекс», но только получение индекса ошибки «не определено».
Какой правильный способ получить такой список и назначить результат к строке?
1 ответ
client.cat.indices({format: 'json'})
.then(console.log(index));
Должно быть
client.cat.indices({format: 'json'})
.then((yourResponse) => {
console.log(yourResponse);
});
Или более прямо
client.cat.indices({format: 'json'})
.then(console.log); // notice I pass the function itself, I don't call it
Promise.prototype.then
принимает обратный вызов как аргумент - то есть функция, которая должна называться, когда обещание в конечном итоге выполняет. Какой ваш код говорит, что «вызов console.log
и пропустите его возвращенное значение на Promise.prototype.then
».
Он сбивает, потому что вы не ссылаетесь на объект как index
index
, вы получаете доступ к переменной index
, который был (видимо) никогда не объявил.
В версии i Show, yourResponse
объявляется как первый (и только) параметр анонимной функции стрелки (в форме (...) => {...}
), которая передается Promise.prototype.then
. Таким образом, yourResponse
здесь заполняется результатом вызова {.then
, когда его обещание выполняет.
Похожие вопросы
Новые вопросы
node.js
Node.js - это неблокирующая асинхронная среда ввода-вывода, основанная на событиях, использующая движок Google V8 JavaScript и библиотеку libuv. Он используется для разработки приложений, которые интенсивно используют возможность запуска JavaScript как на клиенте, так и на стороне сервера, и, следовательно, выигрывают от повторного использования кода и отсутствия переключения контекста.