Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/8.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
Node.js 代码块起作用,返回不';T_Node.js_Promise - Fatal编程技术网

Node.js 代码块起作用,返回不';T

Node.js 代码块起作用,返回不';T,node.js,promise,Node.js,Promise,甚至不知道该如何准确地表达 我有两个功能,你可以在下面看到。checkDescription按预期工作并返回,然后拒绝承诺。第二个块“checkAwsVsSgs”也按预期执行,但从不拒绝承诺,甚至不执行test console.log部分 // Library Module, Public functions module.exports = { checkSG: function(block) { return new Promise((resolve, reject) =&

甚至不知道该如何准确地表达

我有两个功能,你可以在下面看到。checkDescription按预期工作并返回,然后拒绝承诺。第二个块“checkAwsVsSgs”也按预期执行,但从不拒绝承诺,甚至不执行test console.log部分

// Library Module, Public functions
module.exports = {


  checkSG: function(block) { 
    return new Promise((resolve, reject) => {
      let found = false;

      Object.keys(awsSecurityGroups).forEach( (key)=> {
        let group = awsSecurityGroups[key];
        if (block.local_action.name === group.GroupName) {
          found = true;

          if (!checkDescription(group, block)) { reject("Description doesn't match.") }
          if (!checkAwsVsSgs(group, block)) { console.log("!!!!! I'm never called"); reject("Found rules in aws that are not in sgs") }

        }
      });

      resolve(found);
    });
  },

};

// Private functions
function checkDescription(group, block) {
  return group.Description === block.local_action.description
}

function checkAwsVsSgs(group, block) { // Look for rules that are in AWS but not sgs
  group.IpPermissions.forEach( (awsRule) => {
    let foundRuleMatch = false;
    block.local_action.rules.forEach ( (blockRule) => {
      //console.log("Checking FromPort %s vs %s and ToPort %s vs %s for %s", awsRule.FromPort, blockRule.from_port, awsRule.ToPort, blockRule.to_port, group.GroupName)
      if (awsRule.ToPort === blockRule.to_port && awsRule.FromPort === blockRule.from_port) { foundRuleMatch = true }
    });
    if (!foundRuleMatch) {
      console.log("Error: Could not find matching rule for %s FromPort: %s ToPort: %s", group.GroupName, awsRule.FromPort, awsRule.ToPort);
      return false;
    }
  });
  return true;
}

这是因为您总是在
checkAwsVsSgs
中返回
true
返回falseforEach
内部的code>用于
forEach
函数,而不是外部函数。您需要这样做:

function checkAwsVsSgs(group, block) { // Look for rules that are in AWS but not sgs
  var found = true;
  group.IpPermissions.forEach( (awsRule) => {
    let foundRuleMatch = false;
    block.local_action.rules.forEach ( (blockRule) => {
      //console.log("Checking FromPort %s vs %s and ToPort %s vs %s for %s", awsRule.FromPort, blockRule.from_port, awsRule.ToPort, blockRule.to_port, group.GroupName)
      if (awsRule.ToPort === blockRule.to_port && awsRule.FromPort === blockRule.from_port) { foundRuleMatch = true }
    });
    if (!foundRuleMatch) {
      console.log("Error: Could not find matching rule for %s FromPort: %s ToPort: %s", group.GroupName, awsRule.FromPort, awsRule.ToPort);
      found = false;
      return;
    }
  });
  return found;
}

此外,如果您想测试数组中的某个元素是否通过了某些条件,请考虑使用或所有元素。

这是因为您总是在<代码> CuthAWSvSSGs<代码>中返回<代码>真< /代码>。

返回falseforEach
内部的code>用于
forEach
函数,而不是外部函数。您需要这样做:

function checkAwsVsSgs(group, block) { // Look for rules that are in AWS but not sgs
  var found = true;
  group.IpPermissions.forEach( (awsRule) => {
    let foundRuleMatch = false;
    block.local_action.rules.forEach ( (blockRule) => {
      //console.log("Checking FromPort %s vs %s and ToPort %s vs %s for %s", awsRule.FromPort, blockRule.from_port, awsRule.ToPort, blockRule.to_port, group.GroupName)
      if (awsRule.ToPort === blockRule.to_port && awsRule.FromPort === blockRule.from_port) { foundRuleMatch = true }
    });
    if (!foundRuleMatch) {
      console.log("Error: Could not find matching rule for %s FromPort: %s ToPort: %s", group.GroupName, awsRule.FromPort, awsRule.ToPort);
      found = false;
      return;
    }
  });
  return found;
}

此外,如果要测试数组中的某个元素是否经过某些条件,请考虑使用或所有元素。