1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/zensh-thunks

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
README_zh.md 9.4 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 26.11.2024 15:51 aa233fe

Thunks

Небольшой и волшебный композитор для всего асинхронного JavaScript.

[![NPM version][npm-image]][npm-url] [![Build Status][travis-image]][travis-url] [![js-standard-style][js-standard-image]][js-standard-url] [![Coverage Status][coveralls-image]][coveralls-url] [![Downloads][downloads-image]][downloads-url] [![Talk topic][talk-image]][talk-url]

Toa — мощный веб-фреймворк, основанный на thunks.

  • Что такое thunk?
    1. Thunk — это функция, которая оборачивает синхронную или асинхронную задачу.
    2. У thunk есть единственный параметр callback, который является CPS-функцией.
    3. После выполнения thunk возвращает новую функцию thunk, образуя цепочку вызовов.
    4. Когда выполнение thunk завершается, результат передаётся в callback.
    5. Если возвращаемое значение callback является функцией thunk, то её результат будет передан в новую функцию thunk. В противном случае результат будет считаться правильным и также передан в новую функцию thunk.

Пример использования:

var thunk = require('../thunks.js')()
var fs = require('fs')

var size = thunk.thunkify(fs.stat)

// generator
thunk(function *() {

  // sequential
  console.log(yield size('.gitignore'))
  console.log(yield size('thunks.js'))
  console.console.log(size('package.json'))

})(function *(error, res) {
  //parallel
  console.log(yield [
    size('.gitignore'),
    size('thunks.js'),
    size('package.json')
  ])
})()
var thunk = require('../thunks.js')()
var fs = require('fs')

var size = thunk.thunkify(fs.stat)

// sequential
size('.gitignore')(function (error, res) {
  console.log(error, res)
  return size('thunks.js')

})(function (error, res) {
  console.log(error, res)
  return size('package.json')

})(function (error, res) {
  console.log(error, res)
})

// parallel
thunk.all([
  size('.gitignore'),
  size('thunks.js'),
  size('package.json')
])(function (error, res) {
  console.log(error, res)
})

// sequential
thunk.seq([
  size('.gitignore'),
  size('thunks.js'),
  size('package.json')
])(function (error, res) {
  console.log(error, res)
})

Установка:

Node.js:

npm install thunks

bower:

bower install thunks

Browser:

<script src="/pathTo/thunks.js"></script>

API:

var thunks = require('thunks')

thunks([options])

Основная функция, создающая генератор thunk с областью действия, которая определяет внутреннюю среду выполнения всех дочерних функций thunk, созданных этим генератором или его дочерними элементами.

  1. Создание базового thunk: любой сбой будет передан следующему дочернему thunk:

    var thunk = thunks()
  2. Создание thunk с прослушивателем onerror: все сбои в области действия этого thunk могут быть перехвачены onerror, и они не будут переданы следующему дочернему thunk, если только onerror не вернёт true:

    var thunk = thunks(function (error) { console.error(error) })
  3. Создание thunk с прослушивателями onerror, onstop и debug: результаты всех операций в области действия thunk сначала передаются в debug, а затем в следующий дочерний thunk:

    var thunk = thunks({
      onstop: function (sig) { console.log(sig) },
      onerror: function (error) { console.error(error) },
      debug: function () { console.log.apply(console, arguments) }
    })

Если у вас есть несколько генераторов thunk с разными областями действия, объединённых для создания сложной логики, каждая область действия остаётся изолированной, что означает, что прослушиватели onerror и debug не будут работать в других областях действия.

thunk(thunkable)

Создаёт новый дочерний thunk.

Thunkable может быть:

  1. Дочерний thunk: выполнение функции приводит к передаче результата в новый thunk:

    var thunk1 = thunk(1)
    var thunk2 = thunk(thunk1) // thunk2 эквивалентен thunk1
  2. Функция (callback): выполнение функции собирает результаты в новом thunk через callback:

    thunk(function (callback) {
      callback(null, 1)
    })(function (error, value) {
      console.log(error, value) // null 1
    })
  3. Promise: результаты promise передаются в новый thunk:

    var promise = Promise.resolve(1)
    
    thunk(promise)(function (error, value) {
      console.log(error, value) // null 1
    })
  4. Объект с методом toThunk:

    var then = Thenjs(1) // then.toThunk() может преобразовать в функцию thunk и использоваться с `co`
    
    thunk(then)(function (error, value) {
      console.log(error, value) // null 1
    })
  5. Generator или Generator Function: аналогично co, но более продвинуто, может yield любое значение и формировать цепочку вызовов:

    thunk(function *() {
      var x = yield 10
      return 2 * x
    })(function *(error, res) {
      console.log(error, res) // null, 20
    
      return yield [1, 2, thunk(3)]
    })(function *(error, res) {
      console.log(error, res) // null, [1, 2, 3] ```

return yield { name: 'test', value: thunk(1) }


Это выражение создаёт объект с двумя свойствами: `name` и `value`. Свойству `name` присваивается значение `'test'`, а свойству `value` — результат вызова функции `thunk(1)`. Функция `yield` используется для передачи управления обратно вызывающей стороне, возвращая при этом указанный объект.

console.log(error, res) // null, {name: 'test', value: 1}


Здесь происходит вывод значений переменных `error` и `res` в консоль. Значение переменной `error` равно `null`, а значение переменной `res` — `{name: 'test', value: 1}`, что соответствует объекту, созданному в предыдущем выражении.

В следующих фрагментах кода происходит вызов функции `thunk` с различными аргументами и передача результата в функцию обратного вызова. В результате выполнения этой функции выводится значение ошибки (если она есть) и значение, полученное от функции `thunk`.

Далее описывается функция `thunk.all`, которая принимает массив или объект, содержащий функции `thunk`, и возвращает новую функцию `thunk`. Эта новая функция выполняет все функции из массива или объекта параллельно и возвращает их результаты в виде нового массива или объекта.

Затем описывается функция `thunk.seq`, которая также принимает массив функций `thunk` и возвращает новую функцию. Эта функция последовательно выполняет функции из массива и возвращает их результаты в виде массива.

Функция `thunk.race` также принимает массив функций `thunk` и возвращает новую функцию, которая выполняет первую завершившуюся функцию из массива и передаёт её результат в новую функцию.

Функция `thunk.digest` преобразует функцию с обратным вызовом в функцию `thunk`, которая возвращает значения ошибки и результата исходной функции.

Наконец, функция `thunk.thunkify` принимает функцию с обратным вызовом и возвращает функцию `thunk`, которая вызывает исходную функцию и возвращает её результат.

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/zensh-thunks.git
git@api.gitlife.ru:oschina-mirror/zensh-thunks.git
oschina-mirror
zensh-thunks
zensh-thunks
master