await defer constructor, async constructor

619 views Asked by At

Is it possible in iced coffee script to make async constructor:

class Animal
  constructor: (autocb) ->
    #some async action here

And call it like:

await new Animal, defer(animal)

When I try to do it, got error:

unexpected ,
1

There are 1 answers

0
Aadit M Shah On BEST ANSWER

In CoffeeScript commas are used as separators for arguments. For example:

add 2, 3

Optionally you may put parentheses around arguments to make it more explicit:

add(2, 3)

However you may not put a comma between the function and the arguments:

add, 2, 3   # not allowed
add(, 2, 3) # can you see your mistake?

The same goes for constructor functions:

new Animal defer(animal)  # this is ok
new Animal(defer(animal)) # defer(animal) is just an argument

However you can't put a comma between new Animal and the first argument:

new Animal, defer(animal)   # not allowed
new Animal(, defer(animal)) # can you see your mistake?

The same goes for await:

await new Animal defer(animal)  # this is ok
await new Animal(defer(animal)) # again defer(animal) is just an argument

However you can't put a comma between the function and the first argument:

await new Animal, defer(animal)   # not allowed
await new Animal(, defer(animal)) # can you see your mistake?

So to answer your question: yes, it is possible to make an async constructor in iced coffee script. Like all asynchronous functions the last argument must always be the callback function generated by defer.

Next time when the compiler says unexpected , just remove the comma. It's as simple as that.