以下面的人为例子为例:
const housekeepingStuff = async function (data) {
const result = await notImportant(data);
result.more = 'yawn';
storeInDatabase(result);
};
const getStuff = async function () {
try {
const data = await getData();
data.extra = 'wow';
housekeepingStuff(data); // <---- don't want to await... but need to for error catching
return Promise.resolve(data);
} catch (err) {
return Promise.reject(err);
}
};
try {
const myData = await doSomeStuff();
res.send(myData);
} catch (err) {
console.log(err);
res.sendStatus(400);
}
我想尽快从getStuff ()
返回数据,而不等待housekeepingStuff()
,但是如果我不等待该函数,则会遇到未捕获的错误。
在将数据获取并发送给任何想要的人之后,我可以在housekeepingStuff()
函数之外调用getStuff()
:
try {
const myData = await doSomeStuff();
res.send(myData);
await housekeepingStuff(data); // <---- am awaiting but who cares because nothing follows
} catch (err) {
console.log(err);
res.sendStatus(400);
}
但这似乎不对,因为我不想每次调用housekeepingStuff()
时都记得要调用doSomeStuff()
……在理想情况下,应该“内部”处理。
这里正确的方法是什么?
答案 0 :(得分:1)
promise(或异步)功能有两种可能的结果:
要获得任何结果,您必须等待。您不能等待一个条件,而不能等待另一个条件,因为整个过程都需要执行,因此您可以找出结果是什么。
否则,您实际上是在问JavaScript引擎:请为我预测函数是否会失败,如果失败,请等待它。
因此,正确的方法是等待它。
但是,如果您不关心此函数的成功或失败,只需通过另一个异步函数调用该函数即可,该异步函数会吞噬所有错误:
async function doSomeStuffAndIgnoreError() {
try {
await doSomeStuff();
} catch (e) {
console.error(e);
}
}