【问题标题】:How to return specified data in function? JavaScript如何在函数中返回指定的数据? JavaScript
【发布时间】:2022-12-12 14:46:21
【问题描述】:

我在 Neo4j 的数组中有以下数据结构。

DATA: [
  {
    "keys": [
      "J"
    ],
    "length": 1,
    "_fields": [
      {
        "identity": {
          "low": 9,
          "high": 0
        },
        "labels": [
          "Journal"
        ],
        "properties": {
          "body": "123"
        },
        "elementId": "9"
      }
    ],
    "_fieldLookup": {
      "J": 0
    }
  },
  {
    "keys": [
      "J"
    ],
    "length": 1,
    "_fields": [
      {
        "identity": {
          "low": 6,
          "high": 0
        },
        "labels": [
          "Journal"
        ],
        "properties": {
          "name": "Journal 221204",
          "body": "<p>Test!</p>",
          "lastEdit": "221204_03:53:02 PM",
          "createdOn": "221204_03:45:33 PM"
        },
        "elementId": "6"
      }
    ],
    "_fieldLookup": {
      "J": 0
    }
  }
]

我正在尝试遍历数组,将特定数据添加到新数组 (finalList),然后使用此代码返回新数组。

// Allow require
import { createRequire } from "module";
const require = createRequire(import.meta.url);

require('dotenv').config()

var neo4j = require('neo4j-driver')

let finalList = [];

export default async function Database(query) {
  const Neo4jUser = process.env.Neo4jUser;
  const Neo4jPass = process.env.Neo4jPass;

  const uri = "";

  try {
    const driver = neo4j.driver(uri, neo4j.auth.basic(Neo4jUser, Neo4jPass));
    let session = driver.session();

    let result = await session.run(query);
    
    let records = Object.values(result)[0];
  
    console.log(Object.keys(records).length);

    if (Object.keys(records).length === 1) {
      let record = Object.values(records)[0];
        
      let fields = record._fields;

      let fields2 = fields[0];
      
      let properties = fields2.properties;

      console.log(properties);

      return properties;
    };

    if (Object.keys(records).length >= 2) {
      let count = Object.keys(records).length;

      console.log(2);

      console.log(count);

      let get_properties = async (records, countTimes) => {
        let record = Object.values(records)[countTimes];
        
        let fields = record._fields;
  
        let fields2 = fields[0];
        
        let properties = fields2.properties;
  
        console.log(properties);
  
        return properties;
      };

      let countTimes = 0;

      while (countTimes < count) {
        let node = get_properties(records, countTimes);

        finalList.concat(node.then());

        countTimes++
      };

      console.log(finalList);

      console.log(`DATA: ${records}`);
      
      return finalList
    };
  } 
  catch (err) {

    if (err.name == "Neo4jError") {
      node = "No Database found"
      return node;
    }
    else {
      console.log(err);
    }
  };
};

每次运行代码时,finalList 都会返回空的。

如何将适当的数据添加到数组并在函数内部返回?

我知道我在函数内部遇到 finalArray 的范围问题,因为我无法让 finalList.concat“保存”数据,但在研究后我无法找到解决问题的方法。

另外,有人能建议一种比我上面的方法更有效的数据排序方法吗?

任何帮助表示赞赏!

【问题讨论】:

    标签: javascript arrays function sorting


    【解决方案1】:

    问题是 node.then() 没有返回任何东西,所以没有什么可以连接的。相反,您必须将回调传递给 .then() 以处理连接列表,或者使用 await 等待从 get_properties() 返回的值得到解析,然后连接列表。

    我会建议这样的事情,

    // Function to asynchronously concat the lists
    const async_concat = async(oldList, value) => {
      return oldList.concat(value);
    }
    
    // Make sure finalList is not const
    var finalList = [];
    
    while (countTimes < count) {
      // await the value of node and asynchronously concat the lists
      let node = await get_properties(records, countTimes);
      finalList = await async_concat(finalList, node);
      countTimes++
    };
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-01-29
      • 1970-01-01
      • 2020-05-15
      • 1970-01-01
      • 1970-01-01
      • 2020-03-24
      • 1970-01-01
      相关资源
      最近更新 更多