在返回的Promise中未执行回调函数

时间:2019-04-08 23:51:04

标签: javascript node.js promise callback amazon-route53

我有两个函数返回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内的回调函数不会执行。但是不确定如何解决它。

任何反馈表示赞赏!谢谢!

1 个答案:

答案 0 :(得分:1)

您必须从then语句中返回诺言以完成链。

getHostedZoneId(dns)
.then(hostZoneId => {
   return getHostIps(dns, hostZoneId); // Add return
})
.then(hostIps => {
    logger.Info(hostIps);
})
.catch(err => logger.error(err));