【问题标题】:Getting Key From Replit Database Not Working从 Replit 数据库获取密钥不起作用
【发布时间】:2021-07-05 15:54:05
【问题描述】:

这是我的代码:

const Database = require("@replit/database");
const db = new Database();

db.set("test", "wow").then(() => {});
console.log(db.list().then(keys => {}));

我安装了数据库包,它说我的 repl 的数据库部分中有一个键,但它不是控制台记录键列表,我没有收到错误。只有这个在控制台中:

Promise { <pending> }
Hint: hit control+c anytime to enter REPL.

【问题讨论】:

  • 尝试将console.log 移动到db.set(...).then( /* move it here */ ) 回调中以避免竞争条件。其次,你没有对keys =&gt; {} 做任何事情。你可能想在这里console.log(keys)。 (我没有使用 repl.it 的数据库,但从 Promise 的角度来看,这段代码没有意义)。空的.thens 毫无意义。如果可行,请随时告诉我,我可以转换为答案:db.set("test", "wow").then(() =&gt; db.list()).then(keys =&gt; console.log(keys))
  • 哈哈成功了,谢谢!如果您将其作为答案,我可以投票并将其标记为最佳答案 C:

标签: javascript node.js database repl.it


【解决方案1】:

好像有两个问题:

  1. 两个 Promise 链断开连接,因此这是 setlist 之间的竞争条件 - 不确定哪个会先触发。
  2. 使用thens -- console.log() 同步记录待处理的承诺,而不是完成承诺的结果,后者仅在then 回调中可用。
db.set("test", "wow")
  .then(() => db.list())           // ensure `list` runs after `set` resolves
  .then(keys => console.log(keys)) // ensure `keys` are logged after `list` resolves

你也可以使用async/await:

(async () => {
  await db.set("test", "wow");
  const keys = await db.list();
  console.log(keys);
})();

这通常被认为更易于阅读,因为它类似于同步代码,但它只是 then 方法的语法糖。

【讨论】:

    猜你喜欢
    • 2021-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-24
    • 1970-01-01
    • 2017-07-02
    • 1970-01-01
    • 2015-12-06
    相关资源
    最近更新 更多