#javascript #node.js #promise #callback #amazon-route53
#javascript #node.js #обещание #обратный вызов #amazon-route53
Вопрос:
У меня есть две функции, которые возвращают обещание. Первый предоставляет значение хоста, а второй использует значение хоста для получения IP-адреса. Я вижу, что первая функция выполняется без каких-либо проблем. Но похоже, что сторона функции обратного getHostIps
вызова вообще не выполняется. Не уверен, почему это происходит …. что не так с моей функцией обещания?
моя цепочка обещаний:
getHostedZoneId(dns)
.then(hostZoneId => {
getHostIps(dns, hostZoneId);
})
.then(hostIps => {
logger.Info(hostIps); //hostIps is undefined
})
.catch(err => logger.error(err));
getHostedZoneId:
var getHostedZoneId = function(dns) {
var params = {
DNSName: dns,
};
return new Promise((resolve, reject) => {
findHostZoneByDNS(params, function(err, data) {
if(err) {
reject(err);
}
else {
resolve(data);
}
});
});
}
getHostIps:
var getHostIps = function(dns, hostZoneId) {
var params = {
HostedZoneId: hostZoneId,
StartRecordName: dns,
};
return new Promise((resolve, reject) => {
findHostIps(params, function(err, data) {
//logger.info("get there");
if(err) {
reject(err);
}
else {
resolve(data);
}
});
});
}
Я зарегистрировал подсказки и ошибки и данные, все они определены. Поэтому я уверен, что функция обратного вызова внутри обещания не выполняется. Но не уверен, как это исправить.
Любая обратная связь приветствуется! Спасибо!
Комментарии:
1. вы исправили пропущенный возврат. затем вы должны отредактировать его. таким образом, ваша проблема меняется, вы получаете undefined (
logger.Info(hostIps); //hostIps is undefine
) для аргумента. что-тоfindHostIps(params, function(err, data) {
не так. можете ли вы предоставить этот код2. возможно, вы делаете что- то неправильно ,
findHostIps
но вы не показали эту функцию, так что, я предполагаю3. Возможно, мой комментарий был расплывчатым… для чего нужен код
findHostIps
— пожалуйста, поделитесь им в своем вопросе, по какой-то причине он явно не вызывает обратный вызов4. Откуда берется значение
dns
ingetHostIps(dns, hostZoneId)
? (dns
ПараметрgetHostedZoneId(dns)
не входит в область видимости)5. Привет всем, проблема решена. Я пишу свой код на основе предыдущего дерьмового кода, который написан предыдущим eng в команде. После того, как я удалил его код, все работает нормально. Я думаю, что в файле js может быть какая-то проблема с состоянием гонки…
Ответ №1:
Вы должны вернуть обещание из своего оператора then, чтобы завершить цепочку.
getHostedZoneId(dns)
.then(hostZoneId => {
return getHostIps(dns, hostZoneId); // Add return
})
.then(hostIps => {
logger.Info(hostIps);
})
.catch(err => logger.error(err));
Комментарии:
1. Привет, Джордан, спасибо за помощь. Я добавляю возврат, но обратный вызов все еще не выполняется :/