我的问题
我有一个异步方法populate()
,它尝试执行某些操作,如果失败,则捕获错误并调用另一个异步方法populateFromServer()
。(这也可能失败).我调用的第一个在一个Promise.all()
与一个catch
后,以防没有尝试工作.然而,.all()
总是触发,因为populate()
,出于某种原因,下面是我的代码的简化版本(typescript):
abstract class Database {
public static async populate() {
try {
await populateFromLocalFile();
} catch (err) {
await this.populateFromServer();
}
}
private static async populateFromServer() {
await fetchFromServer(); // Might fail eg. if there is no internet
}
}
在其他地方:
Promise.all([
ChildDB1.populate(),
ChildDB2.populate(),
ChildDB3.populate(),
])
.then(() => /* population worked (either local or distant) */)
.catch(() => /* no population attempt worked */)
当populate()
失败时,我的代码似乎在Promise.all
之后被捕获,即使我捕获了它并且populateFromServer()
工作得很好(我检查了日志)。为什么?我如何修复这个问题?
我所尝试的
返回Promise.resolve()
有人建议在catch块的末尾返回Promise.resolve()
,但这并没有解决问题:
public static async populate() {
try {
await populateFromLocalFile();
} catch (err) {
await this.populateFromServer();
return Promise.resolve()
}
return Promise.resolve()
}
使用.then
我也试过用.then
的另一种方式,但我仍然有这个问题
abstract class Database {
public static async populate() {
await populateFromLocalFile()
.then(() => doStuff())
.catch(async () => {
console.log('error happened here');
await this.populateFromServer();
});
}
private static async B() {
await fetchFromServer();
}
}
1条答案
按热度按时间z9gpfhce1#
问题出在我的
Promise.all
的.then
方法中