Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/446.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 Node.js在数组中插入数组的Neo4j_Javascript_Node.js_Neo4j - Fatal编程技术网

Javascript Node.js在数组中插入数组的Neo4j

Javascript Node.js在数组中插入数组的Neo4j,javascript,node.js,neo4j,Javascript,Node.js,Neo4j,我正在尝试使用node.js在Neo4j数据库中创建一些节点和连接。我正在搞乱一些教程并试图修改它们。我是个不速之客。在这种情况下,我需要解析一组对象来填充数据库。在每个对象中,都有经验数组。我不断地犯错误 未经处理的拒绝承诺。此错误源于 在没有catch块的异步函数内部,或通过拒绝 没有处理的承诺。抓住 我认为错误与循环经验有关。这是循环中的循环。我不知道我怎样才能克服这个问题 // Create a person node function addPerson(tx, name) { r

我正在尝试使用node.js在Neo4j数据库中创建一些节点和连接。我正在搞乱一些教程并试图修改它们。我是个不速之客。在这种情况下,我需要解析一组对象来填充数据库。在每个对象中,都有经验数组。我不断地犯错误

未经处理的拒绝承诺。此错误源于 在没有catch块的异步函数内部,或通过拒绝 没有处理的承诺。抓住

我认为错误与循环经验有关。这是循环中的循环。我不知道我怎样才能克服这个问题

// Create a person node
function addPerson(tx, name) {
  return tx.run("MERGE (a:Person {name: $name})", { name: name });
}

// Create a position node
async function addPosition(tx, name) {
  return tx.run("CREATE (a:Position {name: $name})", { name: name });
}

// Create an employment relationship to a pre-existing Person node.
// This relies on the person first having been created.
function addPositionConnection(tx, personName, positionTitle) {
  return tx.run(
    "MATCH (person:Person {name: $personName}) " + "MATCH (position:Position {name: $positionTitle}) " + "CREATE (person)-[:HAS_POSITION]->(position)",
    {
      personName: personName,
      positionTitle: positionTitle
    }
  );
}

(async function neo4jInsertData() {
  try {
    const profiles = [
      {
        userProfile: {
          fullName: "Test name 1"
        },
        experiences: [
          {
            title: "CEO"
          }
        ]
      },
      {
        userProfile: {
          fullName: "Test name 2"
        },
        experiences: [
          {
            title: "CTO"
          }
        ]
      }
    ];

    for (var x = 0; x < profiles.length; x++) {
      const name = profiles[x].userProfile.fullName;
      const experiences = profiles[x].experiences;

      const session1 = driver.session(neo4j.WRITE);

      const first = session1
        .writeTransaction(tx => addPerson(tx, name))
        .then(tx => {
          try {
            experiences.forEach((tx, experience, index) => {
              addPosition(tx, experience.title).then(() => addPositionConnection(tx, name, experience.title));
            });
          } catch (err) {
            console.log("err", err);
          }
        })
        .then(() => {
          console.log("closing");

          return session1.close();
        });
    }
  } catch (err) {
    console.log("there is an error", err);
  }
})();
addPosition函数用async注释,因此addPosition将返回一个承诺,该承诺可能会被异步拒绝,例如,如果其tx.run调用引发异常

您得到的错误消息是,您的addPosition调用返回的包含then块的承诺被拒绝,但由于该承诺没有catch块,因此无法处理拒绝

解决此问题的一种方法是使用wait注释addPosition调用,这将把任何承诺拒绝转换为抛出的异常