我承诺,我找不到能处理我情景的任何事情。
我使用了一组完美的示例,直到我添加了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
时完成的有没有办法防止这种情况?
答案 0 :(得分:0)
你忘了解决内心的承诺。
只需执行resolve(DB_WorkIssues.allDocs({ include_docs: true, descending: false },…)
而不是使用字符串解析promise(这会立即解析承诺)。