Javascript 承诺不起作用,如果你要求承诺

Javascript 承诺不起作用,如果你要求承诺,javascript,pouchdb,Javascript,Pouchdb,我保证,但我找不到任何可以处理我的情况的东西 我使用了一组承诺样本,在我添加allDocs call的邮袋之前,这些承诺都是完美的 当我直接在allDocs调用上链接时,它工作得很好。有人告诉我,我可以在承诺中做出承诺,但事实似乎并非如此 我之所以按照我的方式设置它,以及为什么使用Promise.All()会很困难,是因为我不希望承诺一次就能执行。我要一个承诺接着一个承诺 我把所有的东西都去掉了,只展示了一个承诺,里面有pockdb call(allDocs)。也许这是不可能的 这是我对cons

我保证,但我找不到任何可以处理我的情况的东西

我使用了一组承诺样本,在我添加allDocs call的邮袋之前,这些承诺都是完美的

当我直接在allDocs调用上链接时,它工作得很好。有人告诉我,我可以在承诺中做出承诺,但事实似乎并非如此

我之所以按照我的方式设置它,以及为什么使用Promise.All()会很困难,是因为我不希望承诺一次就能执行。我要一个承诺接着一个承诺

我把所有的东西都去掉了,只展示了一个承诺,里面有pockdb call(allDocs)。也许这是不可能的

这是我对console.log的承诺,您可以查看它们的路径

我的承诺:

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');
   });
};
让洁净室=功能(){
返回新承诺(功能(解决、拒绝){
控制台日志(“启动洁净室”);
log(“启动DB_WorkIssue.alldocs”);
DB_WorkIssues.allDocs({include_docs:true,descending:false},函数(err,response){
数据=response.rows;
itemp=0;
log(“所有文档中的at For循环”);
对于(var i=0;i
它所做的只是调用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 () {
})。然后(函数(){
返回initialize();
}).then(功能(prMessage){

**return cleanRoom();***您忘记了解决内部承诺问题


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

避免!“但洁净室会在Pocket命令完成之前解析。”-嗯,是的,这正是你告诉它要做的。你在启动Pocket命令后立即调用了
resolve()
。我理解。但是cleanroom是一个承诺,我不希望它在完成之前得到解决。我还注意到“then”allDocs承诺的一部分发生在allDocs函数启动之前,更不用说完成了。
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