在阅读async
andawait
时,我注意到它几乎等同于生成器函数。考虑来自 TypeScript Deep Dive 的这个片段:
异步等待
(...)
// Not actual code. A thought experiment async function foo() { try { var val = await getMeAPromise(); console.log(val); } catch(err) { console.log('Error: ', err.message); } }
(...)
生成的 JavaScript
您不必了解这一点,但如果您阅读过生成器,这将相当简单。该函数
foo
可以简单地包装如下:const foo = wrapToReturnPromise(function* () { try { var val = yield getMeAPromise(); console.log(val); } catch(err) { console.log('Error: ', err.message); } });
其中
wrapToReturnPromise
只是执行生成器函数以获取generator
然后使用generator.next()
,如果值为 apromise
它会then
+catch
承诺并取决于结果调用genertor.next(result)
或genertor.throw(error)
。而已!
它最终成为“新功能”的原因是什么?恕我直言,仅使用wrapToReturnPromise
某个库中的该函数同样好,同时不会增加 JavaScript 本身的复杂性。
注意:它与这个问题有关,但在这里我问的是“为什么”,而不是“如何”。我试图理解动机。