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