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.
Пример использования:
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')
Основная функция, создающая генератор thunk с областью действия, которая определяет внутреннюю среду выполнения всех дочерних функций thunk, созданных этим генератором или его дочерними элементами.
Создание базового thunk: любой сбой будет передан следующему дочернему thunk:
var thunk = thunks()
Создание thunk с прослушивателем onerror: все сбои в области действия этого thunk могут быть перехвачены onerror, и они не будут переданы следующему дочернему thunk, если только onerror не вернёт true:
var thunk = thunks(function (error) { console.error(error) })
Создание 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: выполнение функции приводит к передаче результата в новый thunk:
var thunk1 = thunk(1)
var thunk2 = thunk(thunk1) // thunk2 эквивалентен thunk1
Функция (callback): выполнение функции собирает результаты в новом thunk через callback:
thunk(function (callback) {
callback(null, 1)
})(function (error, value) {
console.log(error, value) // null 1
})
Promise: результаты promise передаются в новый thunk:
var promise = Promise.resolve(1)
thunk(promise)(function (error, value) {
console.log(error, value) // null 1
})
Объект с методом toThunk:
var then = Thenjs(1) // then.toThunk() может преобразовать в функцию thunk и использоваться с `co`
thunk(then)(function (error, value) {
console.log(error, value) // null 1
})
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 )