返回的Promise中不执行回调函数

问题描述 投票:2回答:1

我有两个函数可以返回promise。第一个提供主机值,第二个使用主机值获取IP地址。我可以看到第一个函数运行没有任何问题。但看起来回调函数方面getHostIps根本没有执行。不确定为什么会发生......我的诺言功能有什么问题?

我的承诺链:

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

获取HostedZoneId:

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中的回调函数不会被执行。但不知道如何解决它。

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

javascript node.js promise callback amazon-route53
1个回答
1
投票

您必须从then语句返回promise以完成链。

getHostedZoneId(dns)
.then(hostZoneId => {
   return getHostIps(dns, hostZoneId); // Add return
})
.then(hostIps => {
    logger.Info(hostIps);
})
.catch(err => logger.error(err));
© www.soinside.com 2019 - 2024. All rights reserved.