Skip to content

@directive on a function level fails to compile with async and multiple parameters #7974

@reebalazs

Description

@reebalazs
  • Is it a bug? Usage questions should often be asked in the forum instead.
  • Concise, focused, friendly issue title & description.
  • A minimal, reproducible example.
  • OS and browser versions, if relevant.
  • Is it already fixed in master? Instructions

On version 12.0.0-rc.2

I don't think this feature of using @directive on a function is documented. Anyway it works well and it's useful for frameworks like NextJs.

The problem seems to be the parameter parsing with async functions.

So this fails to compile - Await on expression not in async context error for the line with await.

let f = @directive("'use cache'") async (p1, ~p2, ~p3) => { await Promise.make((resolve, _reject) => resolve((p1, p2, p3)) } 

While this compiles (with zero or one parameters):

let f = @directive("'use cache'") async (p1) => { await Promise.make((resolve, _reject) => resolve((p1))) } 

And this also compiles (without async):

let f = @directive("'use cache'") (p1, ~p2, ~p3) => { Promise.make((resolve, _reject) => resolve((p1, p2, p3))) }

So zero or one parameters compile with async, more than one parameter fails to compile with async. While without async, any number of parameters compile correctly. So I can find a workaround by not using async, if I need multiple parameters. However this looks like a bug.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions