فهرست منبع

fix(compiler): allow inline async functions in event handlers

Eduardo San Martin Morote 6 سال پیش
والد
کامیت
fe34f96a3e
2فایلهای تغییر یافته به همراه26 افزوده شده و 1 حذف شده
  1. 1 1
      src/compiler/codegen/events.js
  2. 25 0
      test/unit/modules/compiler/codegen.spec.js

+ 1 - 1
src/compiler/codegen/events.js

@@ -1,6 +1,6 @@
 /* @flow */
 
-const fnExpRE = /^([\w$_]+|\([^)]*?\))\s*=>|^function(?:\s+[\w$]+)?\s*\(/
+const fnExpRE = /^((?:async )?[\w$_]+|(?:async ?)?\([^)]*?\))\s*=>|^(?:async )?function(?:\s+[\w$]+)?\s*\(/
 const fnInvokeRE = /\([^)]*?\);*$/
 const simplePathRE = /^[A-Za-z_$][\w$]*(?:\.[A-Za-z_$][\w$]*|\['[^']*?']|\["[^"]*?"]|\[\d+]|\[[A-Za-z_$][\w$]*])*$/
 

+ 25 - 0
test/unit/modules/compiler/codegen.spec.js

@@ -701,5 +701,30 @@ describe('codegen', () => {
       `with(this){return _c('div',[(ok)?_l((1),function(i){return _c('foo',{key:i})}):_e()],2)}`
     )
   })
+
+  it('should allow async arrow functions in event handlers', () => {
+    assertCodegen(
+      `<button @click="async () => a += await 2"></button>`,
+      `with(this){return _c('button',{on:{"click":async () => a += await 2}})}`
+    )
+    assertCodegen(
+      `<button @click="async() => a += await 2"></button>`,
+      `with(this){return _c('button',{on:{"click":async() => a += await 2}})}`
+    )
+  })
+
+  it('should allow async arrow functions with parameters in event handlers', () => {
+    assertCodegen(
+      `<button @click="async n => n += await 2"></button>`,
+      `with(this){return _c('button',{on:{"click":async n => n += await 2}})}`
+    )
+  })
+
+  it('should allow async functions in event handlers', () => {
+    assertCodegen(
+      `<button @click="async function () { a += await 2}"></button>`,
+      `with(this){return _c('button',{on:{"click":async function () { a += await 2}}})}`
+    )
+  })
 })
 /* eslint-enable quotes */