如果PouchDB调用诺言,则承诺不起作用

时间:2017-03-07 21:57:36

标签: javascript pouchdb

我承诺,我找不到能处理我情景的任何事情。

我使用了一组完美的示例,直到我添加了allDocs调用的小袋。

当我直接在allDocs调用上链接时,它工作正常。我被告知我可以在承诺中作出承诺,但事实似乎并非如此。

我有它设置我的方式以及为什么难以使用Promise.All()的原因是因为我不希望所有承诺在onece上执行。我想要一个承诺跟随另一个。

我剥离了所有内容,只显示了一个包含PouchDB调用(allDocs)的承诺。也许这不可能做到。

这是我对其中的console.logs的承诺,因此您可以看到路径。

我的承诺:

let cleanRoom = function () {
   return new Promise(function (resolve, reject) {

      console.log("starting cleanRoom");
      console.log("starting DB_WorkIssue.alldocs");
      DB_WorkIssues.allDocs({ include_docs: true, descending: false }, function (err, response) {
         data = response.rows;
         itemp = 0;

         console.log("at For Loop in allDocs");

         for (var i = 0; i < response.total_rows; i++) {
            if (data[i].doc.IsDeleted || data[i].doc.IsWorkIssueInserted || data[i].doc.IsWorkIssueUpdated || data[i].doc.IsLogInserted) {
               DirtyFlag = true;
            }
         }
         console.log("exiting allDocs");

         return;
      }).then(function () {
         console.log("inside then function after alldocs");
      }).catch(function (err) {
         console.log("inside catch");
         showMsg("Error in cleanRoom/allDocs: " + err);
      });

      console.log("exiting cleanRoom")
      resolve('Cleaned The Room');
   });
};

所有这一切都是调用allDocs方法,然后在函数中查看是否有任何记录已更新。然后它可以继续。

但这不是正在发生的事情。

以下是链条:

   }).then(function () {
      return initialize();
   }).then(function (prMessage) {
      **return cleanRoom();**   <--- my promise
   }).then(function (result) {
      return removeGarbage(result);
   }).then(function (result) {
      return winIcecream(result);
   }).then(function (result) {
      console.log('finished ' + result);
   }).then(function () {
      console.log("starting UpdateworkIssuesJson");
      return updateWorkIssuesJson();
   }).then(function () {

结果:

tasksmain.js:165 starting cleanRoom
tasksmain.js:166 starting DB_WorkIssue.alldocs            <-- Pouch call
tasksmain.js:188 exiting cleanroom                        <-- exits promise
tasksmain.js:195 inside removeGarbage                     <-- I don't want it to do this until Pouch call is done.
tasksmain.js:202 inside winIceCream
taskspouch.js:91 finished Cleaned The Room remove Garbage won Icecream
taskspouch.js:93 starting UpdateworkIssuesJson
tasksmain.js:182 inside then function after alldocs       <-- now back to the pouch function call (way too late.
tasksmain.js:171 at For Loop in allDocs
tasksmain.js:178 exiting allDocs                          <--- Pouches chain
taskspouch.js:96 starting showTasks

问题是 - 原始的承诺链正在按预期工作。

当“洁净室”结算时,它会继续。但是,在Pouch命令完成之前,洁净室会解决。它实际上是在allDoc

时完成的

有没有办法防止这种情况?

1 个答案:

答案 0 :(得分:0)

你忘了解决内心的承诺。

只需执行resolve(DB_WorkIssues.allDocs({ include_docs: true, descending: false },…)而不是使用字符串解析promise(这会立即解析承诺)。