例如,var p = new Promise(...); 这个变量 p 还没有赋值,executor of the promise 就已经开始执行了吧。那么问题来了。如何 try-catch executor 里面的 exception 呢?
如下所示,如果 调用 p 和 检查并使用 p,分别在不同的函数里面 func3 vs. func4,如何捕获并检查 p 的结果呢?
func1 或者 func2 throw exception,到底是在 func3 里面被抓还是 func4 里面被抓?有没有什么 better-practice ?
async func1() {
...
""(); // will throw type error
}
func2() {
return new Promise((resolve, reject) => {
""(); // will throw type error
});
let p = null;
func3() {
p = func1(); // or p = func2();
// learn from the stackoverflow
(async () => {
await p;
}).catch(...);
}
func4() {
try {
const res = await p;
} catch (error) {...}
send(res);
}
楼主实际使用的场景在这里: https://v2ex.com/t/701731
stackoverflow 上面看到的参考: https://stackoverflow.com/questions/43036229/is-it-an-anti-pattern-to-use-async-await-inside-of-a-new-promise-constructor
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.