управление потоком выполнения в обещании - PullRequest
0 голосов
/ 01 ноября 2018

Почему в следующем коде обещание внутри get_dbinfo не разрешается до выполнения .then (result) в блоке вызывающего кода?

Насколько я понимаю, код внутри нового Обещания будет завершен, прежде чем вернуться к части .hen оператора вызова.

    dbFuncs.get_dbinfo()
    .then((result) => {
      count = result.info.doc_count
      if (count < 500){perPage = count};
    });

    function get_dbinfo() {
      return new Promise((resolve, reject) => {
        return db.info()
        .then((result) => {
            resolve(result)
        }).catch((err) => {
            console.log(err);
            reject(err)
        });
    });
    }

1 Ответ

0 голосов
/ 01 ноября 2018

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

Окончательное решение состояло в том, чтобы привести все в одну цепочку обещаний с повторной настройкой при первом вызове dbFuncs, как показано ниже. В get_dbinfo () не было внесено никаких изменений.

    var count = 0;
      var perPage = 500;
      var page = req.query.p || 1;

    return dbFuncs.get_dbinfo()
    .then((result) => {
      count = result.doc_count
      if (count < 500){perPage = count};
    return db.find({
        selector: {
          $and: [
            {last_name: { '$gt': 1}},
          ]
        },
        use_index: ['patients'],
        sort: [{'last_name': 'asc'}],
        skip: ((perPage * page) - perPage),
        limit: perPage

      }).then((docs) => {
        let pages = Math.ceil(count / perPage);
        res.render("patients", {
          pagination: {
            currentpage: page,
            page: pages
          },
            obj: docs,
            current: page,
        });
      }).catch((err) => {
          console.log('error in patients_controller', err);
      });
    });
    };

Для потомков этот полный блок - отличный способ разбить набор данных (в данном случае из pouchdb) на шаблон hbs.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...