Ожидайте отложенного конструктора, асинхронного конструктора

Это возможно в iced coffee script сделать асинхронный конструктор:

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

И назовите это как:

await new Animal, defer(animal)

Когда я пытаюсь это сделать, появляется ошибка:

unexpected ,

1 ответ

Решение

В CoffeeScript запятые используются в качестве разделителей для аргументов. Например:

add 2, 3

При желании вы можете поставить круглые скобки вокруг аргументов, чтобы сделать их более явными:

add(2, 3)

Однако вы не можете ставить запятую между функцией и аргументами:

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

То же самое касается функций конструктора:

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

Однако вы не можете поставить запятую между new Animal и первый аргумент:

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

То же самое касается await:

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

Однако вы не можете поставить запятую между функцией и первым аргументом:

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

Итак, чтобы ответить на ваш вопрос: да, можно сделать асинхронный конструктор в сценарии со льдом кофе. Как и во всех асинхронных функциях, последний аргумент всегда должен быть функцией обратного вызова, сгенерированной defer,

В следующий раз, когда компилятор скажет unexpected , просто удалите запятую. Это так просто.

Другие вопросы по тегам