英文:
Proper way to use return statement in try, catch block for asynchronous functions
问题
以下是翻译好的部分:
async function createQuiz(questions, quizDetails) {
const { quizName, minPoints, maxPoints } = quizDetails;
try {
const quiz = await Quiz.create({
quizName,
minPoints,
maxPoints,
questions,
})
if (quiz) console.log("成功");
} catch (e) {
console.log(e.message);
}
}
createQuiz(questions, quizDetails);
async function createQuiz(questions, quizDetails) {
const { quizName, minPoints, maxPoints } = quizDetails;
try {
const quiz = await Quiz.create({
quizName,
minPoints,
maxPoints,
questions,
})
if (quiz) return "成功";
} catch (e) {
return e.message;
}
}
console.log(createQuiz(questions, quizDetails));
当使用 return
语句时,控制台输出 "Promise { pending }",但为什么在函数内部使用 console.log
时没有输出相同的语句呢?
英文:
I have the following code below that creates a new MongoDB document using Mongoose which does work.
async function createQuiz(questions, quizDetails) {
const { quizName, minPoints, maxPoints } = quizDetails;
try {
const quiz = await Quiz.create({
quizName,
minPoints,
maxPoints,
questions,
})
if (quiz) console.log("success");
} catch (e) {
console.log(e.message);
}
}
createQuiz(questions, quizDetails);
However, if I replace the console.log
statements with return
statements shown in the code below, it suddenly stops working.
async function createQuiz(questions, quizDetails) {
const { quizName, minPoints, maxPoints } = quizDetails;
try {
const quiz = await Quiz.create({
quizName,
minPoints,
maxPoints,
questions,
})
if (quiz) return "success";
} catch (e) {
return e.message;
}
}
console.log(createQuiz(questions, quizDetails));
With the return
statements, the console logs "Promise { pending }." But why doesn't it log that same statement when the console.log
was inside the function?
答案1
得分: 0
以下是翻译好的部分:
"As the comments said (thank you by the way), an async function always returns a promise so the proper way to write out the code so that it returns the value of the fulfilled promise is the following:
async function createQuiz(questions, quizDetails) {
const { quizName, minPoints, maxPoints } = quizDetails;
try {
const quiz = await Quiz.create({
quizName,
minPoints,
maxPoints,
questions,
})
if (quiz) return "success";
} catch (e) {
return e.message;
}
}
const createdQuiz = createQuiz(questions, quizDetails);
createdQuiz.then(data => console.log(data));
```"
<details>
<summary>英文:</summary>
As the comments said (thank you by the way), an async function always returns a promise so the proper way to write out the code so that it returns the value of the fulfilled promise is the following:
async function createQuiz(questions, quizDetails) {
const { quizName, minPoints, maxPoints } = quizDetails;
try {
const quiz = await Quiz.create({
quizName,
minPoints,
maxPoints,
questions,
})
if (quiz) return "success";
} catch (e) {
return e.message;
}
}
const createdQuiz = createQuiz(questions, quizDetails);
createdQuiz.then(data => console.log(data));
</details>
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论