首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >函数中的PouchDB -调用get() ( TypeError: cb不是函数)

函数中的PouchDB -调用get() ( TypeError: cb不是函数)
EN

Stack Overflow用户
提问于 2021-09-24 18:22:06
回答 1查看 129关注 0票数 1

我正在尝试使用PouchDB制作一个简单的登录系统,但是当我想在函数logIn()中调用db.get()时,我遇到了问题。

代码语言:javascript
复制
  var submit = $("input[name='submit']");
  function logIn() {
    var username = $("input[name='username']").value;
    var password = $("input[name='password']").value;

    db.get(table.users, (err, info) => { // <-- Pouch db get() function to get data
      if (!err) {
        var data = ("db value", info);
        for (i = 0; i < 2; i++) {
          if (username == data[i].name && password == data[i].pass) {
            console.log(username + " is logged in!");
            return;
          }
        }
        console.log("Incorrect data!");
      } else {
        console.log("err field", err);
      }
    });
    db.get(); // <-- Here I call get() function
  }
  
  submit.click(() => {
    logIn(); // <-- On click call login() function
  });

在控制台里我得到

TypeError: cb不是一个函数

有更好的选择吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-09-25 19:45:38

误差

TypeError: cb不是一个函数

db.get()中抛出,因为代码在调用get方法时没有回调参数(实际上没有参数)。

logIn方法调用db.get两次,首先在这里

代码语言:javascript
复制
db.get(table.users, (err, info) => { // <-- Pouch db get() function to get data
 ...
});

然后在这里

代码语言:javascript
复制
db.get(); // <-- Here I call get() function

第二个电话立即失败。看来,db.get(table.users,(err,info) =>是在定义db.get,但它不是,而是一个实际的调用。

下面的代码片段演示了带有回调的db.get。我在其中留下了一个异步/等待示例。请参阅pouchDB文档中的到达

代码语言:javascript
复制
const g_result = 'result';
const gel = id => document.getElementById(id);
let db;

function logIn(userName, password) {
  const view = gel(g_result);
  // get the Users doc using get
  db.get("Users", (err, doc) => {
    if (err) {
      view.innerText = JSON.stringify(err, undefined, 3);
    } else {
      let info = doc.data.find(e => e.name === userName && e.pass === password);
      if (info) {
        view.innerText = ` Welcome ${userName}!`;
      } else {
        view.innerText = ` Log in failed, try again.`;
      }
    }
  });
}

async function logInAwait(userName, password) {
  const view = gel(g_result);
  
  let text = "";
  try {
    let doc = await db.get("Users");
    let info = doc.data.find(e => e.name === userName && e.pass === password);
    if (info) {
      text = ` Welcome ${userName}!`;
    } else {
      text = ` Log in failed, try again.`;
    }
  } catch (err) {
    text = JSON.stringify(err, undefined, 3);
  } finally {
    view.innerText = text;
  }

}

// canned documents
function getDocsToInstall() {
  return [{
    _id: "Users",
    data: [{
        name: "Jerry",
        pass: "Garcia"
      },
      {
        name: "Bob",
        pass: "Weir"
      },
      {
        name: "Wavy",
        pass: "Gravy"
      },
    ]
  }];
}

// init example db instance
async function initDb() {
  db = new PouchDB('test', {
    adapter: 'memory'
  });

  await db.bulkDocs(getDocsToInstall());
};

(async() => {
  await initDb();
  gel("form").style = "";
})();
代码语言:javascript
复制
<script src="https://github.com/pouchdb/pouchdb/releases/download/7.1.1/pouchdb-7.1.1.min.js"></script>
<script src="https://github.com/pouchdb/pouchdb/releases/download/7.1.1/pouchdb.memory.min.js"></script>
<pre id="form" style="display: none">
<label for="user">User Name</label>
<input id="user" /> 
<label for="pass">Password</label>
<input id="pass" /> <br/>
<button onclick="logIn(gel('user').value,gel('pass').value)">Log In (callback)</button>&nbsp;<button onclick="logInAwait(gel('user').value,gel('pass').value)">Log In (async)</button>
</pre>
<hr/>
<pre id='result'></pre>

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69319599

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档