查看其他问题,并不清楚这里最好的做法是什么。
我需要从函数 A 调用函数 B。但是函数 B 进行了多次异步调用,我更愿意使用异步/等待而不是链接 promise 。问题变成了,我需要告诉函数 A 等待函数 B 中的所有等待完成。
这是我所做的工作,我想知道它是否是反模式。
为此,函数 A(异步)调用函数 B,函数 B 是一个包含异步函数 C 的 promise 。
const functionA = async () => {
await functionB().catch(err => console.error(err));
console.log(' ALL DONE ');
}
const functionB = () => {
return new Promise( (resolve,reject) => {
const functionC = async () => {
const var1 = await make_databaseCall();
const var2 = await make_different_DatabaseCall();
if(!var2) throw Error('var2 is invalid!');
const what_I_need = var1 + var2;
return resolve();
}
//Calling Function C and returning what FuncC returns (resolve()) to Function B
return functionC();
});
}
最佳答案
Promises
和 await/async 的混合在这种情况下不是必需的。并且不需要functionC()
的嵌套。我认为您可以将其简化为:
const functionA = async () => {
try {
await functionB();
} catch {...}
}
const functionB = async () => {
const var1 = await make_databaseCall();
const var2 = await make_different_DatabaseCall();
if(!var2) throw Error('var2 is invalid!');
return var1 + var2;
}
此外,如果您可以并行执行两个数据库调用,您将需要使用 Promise.all()
.
const [var1, var2] = await Promise.all([
make_databaseCall(),
make_different_DatabaseCall()]);
关于javascript - 这是在 promise 中嵌套异步函数的正确方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59411544/