Spec-Zone.ru › Nim 1

asyncjs

Этот модуль реализует типы и макросы для написания асинхронного кода для JS бэкенда. Он предоставляет инструменты для взаимодействия с JavaScript асинхронным API и библиотеками, написания асинхронных процедур на Nim и преобразования кода на основе обратного вызова в промисы.

Процедура Nim является асинхронной, когда она включает {.async.} пragma. Она всегда должна иметь тип возврата Future[T] или вообще не иметь типа возврата. Тип возврата Future[void] подразумевается по умолчанию.

Это примерно эквивалентно async ключевому слову в коде JavaScript.

proc loadGame(name: string): Future[Game] {.async.} =
  # code

должно быть эквивалентно

async function loadGame(name) {
  // code
}

Вызов асинхронной процедуры обычно требует await для ожидания завершения Future.

var game = await loadGame(name)

Часто вы можете работать с API на основе обратного вызова. Вы можете обернуть их асинхронными процедурами с использованием промисов и newPromise.

proc loadGame(name: string): Future[Game] =
  var promise = newPromise() do (resolve: proc(response: Game)):
    cbBasedLoadGame(name) do (game: Game):
      resolve(game)
  return promise

Вперед объявления работают корректно, вам просто нужно всегда добавить {.async.} пragma:

proc loadGame(name: string): Future[Game] {.async.}

Совместимость с JavaScript

Nim в настоящее время генерирует async/await код JavaScript, который поддерживается в современном EcmaScript и большинстве современных версий браузеров, Node.js и Electron. Если вам нужно использовать этот модуль со старыми версиями JavaScript, вы можете использовать инструмент, который делает обратную портирование полученного кода JavaScript, как babel.

Импорты

jsffi, macros

Типы

Future[T] = ref object
  future*: T
Исходный код Редактировать
PromiseJs {...}{.importcpp: "Promise".} = ref object
Исходный код Редактировать

Процедуры

proc newPromise[T](handler: proc (resolve: proc (response: T))): Future[T] {...}{.
    importcpp: "(new Promise(#))".}
Помощник для обертывания функций на основе обратного вызова в промисы и асинхронные процедуры Исходный код Редактировать
proc newPromise(handler: proc (resolve: proc ())): Future[void] {...}{.
    importcpp: "(new Promise(#))".}
Помощник для обертывания функций на основе обратного вызова в промисы и асинхронные процедуры Исходный код Редактировать

Макросы

macro async(arg: untyped): untyped
Макрос, который преобразует обычные процедуры в совместимые с JavaScript асинхронные процедуры Исходный код Редактировать

© 2006–2021 Andreas Rumpf
Licensed under the MIT License.
https://nim-lang.org/docs/asyncjs.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API