0

我有一个使用 ArangoDB 的节点应用程序,我在查询时注意到日志中有大量重复条目。我不知道它是在执行多个请求,还是只是重复记录。

我从我的 Hapi.js 处理程序中调用它,它是一个异步函数

let user = await arango.getUser('user1');

这就是功能

exports.getUser = function(name) {
  return new Promise(function(fulfill, reject) {
    let query = `FOR u IN users FILTER u._key == '${name}' RETURN u`
    db.query(query).then(user => {
      logger.debug(`Retrieved user '${name}' successfully.`);
      fulfill(user._result[0]);
    }).catch(err => {
      logger.error(`Failed to query for user '${name}'`);
      reject();
    });
  });
}

它实现了一个结果,但日志在单个页面加载时看起来像这样。它总是16次。

2018-08-03T01:33:17.922Z debug: Retrieved user 'user1' successfully.
2018-08-03T01:33:17.925Z debug: Retrieved user 'user1' successfully.
2018-08-03T01:33:18.006Z debug: Retrieved user 'user1' successfully.
2018-08-03T01:33:18.027Z debug: Retrieved user 'user1' successfully.
2018-08-03T01:33:18.030Z debug: Retrieved user 'user1' successfully.
2018-08-03T01:33:18.036Z debug: Retrieved user 'user1' successfully.
2018-08-03T01:33:18.041Z debug: Retrieved user 'user1' successfully.
2018-08-03T01:33:18.042Z debug: Retrieved user 'user1' successfully.
2018-08-03T01:33:18.045Z debug: Retrieved user 'user1' successfully.
2018-08-03T01:33:18.046Z debug: Retrieved user 'user1' successfully.
2018-08-03T01:33:18.053Z debug: Retrieved user 'user1' successfully.
2018-08-03T01:33:18.057Z debug: Retrieved user 'user1' successfully.
2018-08-03T01:33:18.058Z debug: Retrieved user 'user1' successfully.
2018-08-03T01:33:18.147Z debug: Retrieved user 'user1' successfully.
2018-08-03T01:33:18.204Z debug: Retrieved user 'user1' successfully.
2018-08-03T01:33:18.293Z debug: Retrieved user 'user1' successfully.

我不确定如何调试它以查看实际查询 Arango 的次数,或者它是否.then()在等待承诺解决的同时执行代码。我以前从未见过这种行为。我在 MacBook 上的 Docker 中运行 Arango,并在终端中运行 Node。如果它实际上没有执行 16 次查询并且只是 async 函数的良性副作用,那很好,我只是想确保我在这里没有做错什么。谢谢您的帮助。

编辑:在额外的测试中,如果函数是在 Hapi.js 处理程序之外调用的,而不是在页面加载期间,则日志只会弹出一次。

4

0 回答 0