Возврат данных из запроса PouchDB

У меня проблема с возвратом данных из запроса PouchDB. Я пытаюсь создать функцию, которая при вызове возвращает определенные данные из PouchDB. Вот мой код:

function getUserFullName() {
            var db = "userInfo";
            var pouch = new PouchDB(db);
            pouch.get("token").then(function (result) {
            console.log(result-user_real_name);
                return result.user_real_name;
            }).catch(function (error) {
                console.log(error);
            });
        }

Итак, что происходит, так это то, что функция возвращает неопределенное значение. Кто-нибудь знает, что я делаю не так?


person axtscz    schedule 04.09.2015    source источник
comment
вы записали в консоль только результат и посмотрели, получаете ли вы его на самом деле? console.log (результат pouchdb, результат); перед возвращением.   -  person ohboy21    schedule 04.09.2015
comment
Да, я уверен, что данные вернутся.   -  person axtscz    schedule 04.09.2015
comment
Разместите объект результата, пожалуйста.   -  person ohboy21    schedule 04.09.2015
comment
@axtscz как у вас работает эта функция? pouch.get - это асинхронная функция. Если вы запустите getUserFullName синхронно, вы не получите результата. getUserFullName требует обратного вызова в качестве параметра   -  person Max Baldwin    schedule 04.09.2015
comment
s / result-user_real_name / result.user_real_name /   -  person stackunderflow    schedule 04.09.2015
comment
попробуйте отладку с console.log(JSON.stringify(result, null, 2)   -  person stackunderflow    schedule 04.09.2015


Ответы (1)


Проблема в том, что похоже, что вы запускаете «getUserFullName» синхронно, но внутри у вас есть асинхронная функция «pouch.get». Возвращаемое значение этой асинхронной функции должно быть возвращено в обратном вызове или обещании.

Если "pouch.get" возвращает обещание, как показано выше с ".then", вы можете написать свой код следующим образом:

function getUserFullName() {
  var db = "userInfo";
  var pouch = new PouchDB(db);

  return pouch.get("token")
}

И запускаем так:

getUserFullName()
  .then(function(fullUserName){
    console.log(fullUserName);
  })
  .catch(function(err){
    console.log(err);
  });

Дайте мне знать, если это сработает или у вас возникнут вопросы. Спасибо!

РЕДАКТИРОВАТЬ: Похоже, "pouch.get" возвращает обещание. См. Пример в их документации здесь. Следовательно, этот код будет работать.

person Max Baldwin    schedule 04.09.2015
comment
Он работает, проблема в том, что он все еще работает асинхронно. Код, зависящий от его результата, выполняется до того, как он вернет значение. - person axtscz; 04.09.2015
comment
Код @axtscz, зависящий от этого результата, должен находиться внутри функции .then функции getUserFullName. Где написано console.log (fullUserName). Это будет результатом getUserFullName. getUserFullName должен выполняться асинхронно, поскольку он зависит от результатов запроса к базе данных. - person Max Baldwin; 04.09.2015
comment
ОК, имеет смысл. Спасибо! - person axtscz; 04.09.2015