【发布时间】:2018-08-23 12:51:50
【问题描述】:
基本概述。
我有一个数据集,我想用 for 语句循环。
在两个函数都完成之前,我不想继续执行 for 循环中的下一项。函数 1 依赖于函数 2 的成功,如果其中一个失败,我希望循环停止。
这是我的两个函数。
submitEntryPromise(entry): Promise < any > {
return new Promise((resolve, reject) => {
this.submitEntry(entry).take(1).subscribe(data => {
if (data) {
resolve(data);
}
}, (error: any) => {
console.log('rejected submitEntry' + JSON.stringify(error));
reject(false);
});
});
}
deleteEntryFromSqlLitePromise(rowid): Promise < any > {
return new Promise((resolve, reject) => {
this.deleteEntry(rowid).then(res => {
if (res) {
resolve(res);
} else {
reject(false);
}
}).catch((error: any) => {
console.log('reject delete' + JSON.stringify(error));
reject(false);
});
});
}
我的数据集(从 sql lite local db 返回) 被命名为 savedEntries
我正在尝试这样的事情。
for (let i = 0, p = Promise.resolve(); i < savedEntries.rows.length; i++) {
p = p.then(_ => this.wpservice.submitEntryPromise(
{
score: savedEntries.rows.item(i).score,
email: savedEntries.rows.item(i).email
}))
}
但我不确定在哪里调用我的 deleteEntryFromSqlLitePromise 函数,我不确定这些函数是否会按顺序执行?
基本上我在离线 sql db 中循环保存条目,并将它们同步到我的服务器,当服务器说它收到我想从本地数据库中删除它的条目时。
任何建议都将不胜感激,我正在为我的离子项目编写打字稿。
【问题讨论】:
-
你应该看看
async/await,它使这样的代码更易于阅读和编写。 -
Duannx,非常相似,我的主要斗争是确保在进入循环的下一部分之前触发这两个项目,我使用承诺链到达了某个地方,但我希望像 Titian 建议的那样使用 async/await ,看起来代码看起来更干净。将发布我发现的矮个子。
标签: typescript ionic3