【问题标题】:Caching datastore query缓存数据存储查询
【发布时间】:2018-01-10 19:22:56
【问题描述】:

我不熟悉节点编程,所以我确定这里的错误与语法有关。

我正在尝试查询数据存储并将返回的实体作为 const 配置引用存储在我的函数中。

出于某种原因,如果我将它作为函数体的一部分调用,我总是会得到 undefined 而不是值。将调用移至被调用的函数是可行的,但我需要这些值来配置函数,因此它不能在第一次调用时出现。

有什么想法吗?

const Datastore = require('@google-cloud/datastore');
const datastore = Datastore();
const query = datastore
  .createQuery('ProxyConfig')
  .filter('function', '=', 'proxy');

const proxyConfig = loadConfig();

function loadConfig() {
    datastore.runQuery(query).then(results => {
    console.log("Query executed");  
    console.log(results);
    return results; 
});

}


exports.proxy = (req, res) => {
  cnf = loadConfig();
  console.log(`config is ${cnf}`);
  res.status(200).send(cnf);
 };

【问题讨论】:

    标签: node.js google-cloud-datastore google-cloud-functions


    【解决方案1】:

    您没有从函数 loadConfig 返回任何内容,这就是您看到 undefined 的原因。有了这样的承诺,你想返回承诺,然后得到结果。通过使用.then 并在该函数中返回一个项目,该值将被包装在另一个承诺中。所以你可以用两种不同的方式来写这个。我将首先按原样使用上面的代码:

    function loadConfig() {
      return datastore.runQuery(query).then(results => {
        console.log("Query executed");  
        console.log(results);
        return results; 
    });
    
    }
    
    exports.proxy = (req, res) => {
      const configPromise = loadConfig().then(results => {
        const cnf = results;
        console.log(`config is ${cnf}`);
        res.status(200).send(cnf);
      })
      .catch(err => {
        res.status(500).send(err);
      });
    };
    

    但是,由于您只是将 Promise 的结果转发给调用函数,因此该代码可以简化为:

    exports.proxy = (req, res) => {
      datastore.runQuery(query).then(results => {
        const cnf = results;
        console.log(`config is ${cnf}`);
        res.status(200).send(cnf);
      })
      .catch(err => {
        res.status(500).send(err);
      });
    };
    

    【讨论】:

    • 谢谢,因为我需要它在函数之外,所以我想避免每次调用都调用该数据存储查询。我猜 node 的做法是将我的所有变量都分配在 promise 的 then 子句中,然后这些变量将可用于正在执行的函数吗?
    • 除了将配置存储在数据存储中之外,还有其他途径吗?您可以只使用该函数部署一个 json 文件并在函数初始化期间加载它吗?想想第一次调用该函数时,它会调用该函数之外的代码一次,这是您可以同步加载配置文件的时候,这是一个小小的打击。之后,您可以保证为每个函数调用进行配置。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-03
    • 1970-01-01
    • 1970-01-01
    • 2019-05-12
    • 1970-01-01
    • 2017-06-21
    • 2013-06-21
    相关资源
    最近更新 更多