我有两个函数返回promise。第一个提供主机值,第二个使用主机值获取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);
}
});
});
}
我记录了hostIps以及err和数据,所有这些都已定义。因此,我确定promise内的回调函数不会执行。但是不确定如何解决它。
任何反馈表示赞赏!谢谢!
答案 0 :(得分:1)
您必须从then语句中返回诺言以完成链。
getHostedZoneId(dns)
.then(hostZoneId => {
return getHostIps(dns, hostZoneId); // Add return
})
.then(hostIps => {
logger.Info(hostIps);
})
.catch(err => logger.error(err));