问题
为什么try catch能捕捉await后promise错误? 和执行栈有关系吗?
为什么try catch 中promise的错误catch不了。 await后就可以catch了?
普通函数不能try catch promise,因为其throw error时的执行栈,和try catch它的函数无关了。
而async await能像generate一样在控制执行流,触发时,函数执行栈恢复到 try catch它时的函数执行栈,所以能try catch。
为什么try catch能捕捉await后promise错误? 和执行栈有关系吗?
为什么try catch 中promise的错误catch不了。 await后就可以catch了?
普通函数不能try catch promise,因为其throw error时的执行栈,和try catch它的函数无关了。
而async await能像generate一样在控制执行流,触发时,函数执行栈恢复到 try catch它时的函数执行栈,所以能try catch。
async/await异步模型是否优于stackful coroutine模型?
这里说的coroutine是stackful的,可以对比js的async/await和fibjs,还有c#的async/await对比go的goroutine。
async/await的优点是不需要为每个coroutine分配单独的栈内存,只需要一个闭包保存状态,避免了内存浪费;在调度上也更加灵活,可以让用户手动调度;另外在实现上也不需要改动虚拟机,只要在语言层面加上generator的支持就可以实现。那么是不是可以认为async/await是一个更好的异步方案呢?
我曾经最大的梦想,就是嫁给一个数学家。
他要当个黑匣子。我解不出来的方程,积不出来的积分,往他哪里一丢,过一会儿就来取新鲜的暖烘烘的答案。