【发布时间】:2017-10-26 07:27:18
【问题描述】:
为什么使用await需要将其外部函数声明为async?
例如,为什么这个 mongoose 语句需要它所在的函数来返回一个承诺?
async function middleware(hostname, done) {
try {
let team = await Teams.findOne({ hostnames: hostname.toLowerCase() }).exec();
done(null, team);
} catch (err) { done(err); }
}
我看到运行时/转译器将 Teams 承诺解析为它的值,并异步发出信号,它“抛出”被拒绝的承诺。
但是 try/catch “捕捉”了那些被拒绝的承诺,那么为什么 async 和 await 如此紧密耦合?
【问题讨论】:
-
我不明白您所说的“但 try/catch “捕获”那些被拒绝的承诺”是什么意思。这与
async关键字有什么关系? -
“为什么这个 mongoose 语句需要它所在的函数来返回一个承诺?” - 否则它如何能够等待 mongoose 承诺的异步结果?
-
这里是语言设计的原因:stackoverflow.com/a/41744179/1483977
标签: javascript asynchronous async-await