Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/369.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 回调函数未在返回的承诺内执行_Javascript_Node.js_Promise_Callback_Amazon Route53 - Fatal编程技术网

Javascript 回调函数未在返回的承诺内执行

Javascript 回调函数未在返回的承诺内执行,javascript,node.js,promise,callback,amazon-route53,Javascript,Node.js,Promise,Callback,Amazon Route53,我有两个函数返回承诺。第一个提供主机值,第二个使用主机值获取IP地址。我可以看到第一个函数运行时没有任何问题。但是看起来回调函数端getHostIps根本没有执行。不知道为什么会发生……我的承诺函数有什么问题 我的承诺链: getHostedZoneId(dns) .then(hostZoneId => { getHostIps(dns, hostZoneId); }) .then(hostIps => { logger.Info(hostIps); //hostIps

我有两个函数返回承诺。第一个提供主机值,第二个使用主机值获取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中的回调函数不会被执行。但不知道如何修复它


任何反馈都将不胜感激!谢谢

您必须从您的then声明中返回承诺才能完成链

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

嗨,乔丹,谢谢你的帮助。我添加了return,但是回调仍然没有执行:/n您修复了缺少的return。你应该编辑它。因此,您的问题发生了变化,您收到了参数的未定义(
logger.Info(hostIps);//hostIps是未定义的
)。
findHostIps(params,function(err,data){
有问题。您能提供该代码吗?您可能做错了什么™ 在
findHostIps
-但是您还没有显示该函数,所以我猜™也许我的评论很模糊,
findHostIps
的代码是什么?请在您的问题中分享它,它显然不是出于某种原因调用回调,
getHostIps(dns,hostZoneId)
中的
dns
值来自哪里?(
gethostdzoneid(dns)
dns
参数不在范围内)大家好,问题解决了。我是根据团队中以前的工程师编写的以前的糟糕代码编写代码的。在我删除了他的代码后,一切正常。我想js文件中可能存在一些种族条件问题。。。