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

OSCHINA-MIRROR/zensh-thunks

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

thunk(1), c: 2, d: thunk(function (callback) { callback(null, [3]) }) })(function (error, value) { console.log(error, value) // null {a: 0, b: 1, c: 2, d: [3]} })


You may also write code like this:

```js
thunk.all.call({x: [1, 2, 3]}, [4, 5, 6])(function (error, value) {
  console.log(error, this.x, value) // null [1, 2, 3] [4, 5, 6]
  return 'thunk!'
})(function (error, value) {
  console.log(error, this.x, value) // null [1, 2, 3] 'thunk!'
})

thunk.seq([thunk1, ..., thunkX])

thunk.seq(thunk1, ..., thunkX)

Возвращает дочернюю функцию thunk.

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

thunk.seq([
  function (callback) {
    setTimeout(function () {
      callback(null, 'a', 'b')
    }, 100)
  },
  thunk(function (callback) {
    callback(null, 'c')
  }),
  [thunk('d'), function *() { return yield 'e' }], // thunk в массиве будет выполняться параллельно
  function (callback) {
    should(flag).be.eql([true, true])
    flag[2] = true
    callback(null, 'f')
  }
])(function (error, value) {
  console.log(error, value) // null [['a', 'b'], 'c', ['d', 'e'], 'f']
})
или
```js
thunk.seq(
  function (callback) {
    setTimeout(function () {
      callback(null, 'a', 'b')
    }, 100)
  },
  thunk(function (callback) {
    callback(null, 'c')
  }),
  [thunk('d'), thunk('e')], // thunk в массиве будет выполнятся параллельно
  function (callback) {
    should(flag).be.eql([true, true])
    flag[2] = true
    callback(null, 'f')
  }
)(function (error, value) {
  console.log(error, value) // null [['a', 'b'], 'c', ['d', 'e'], 'f']
})

Вы также можете написать код следующим образом:

thunk.seq.call({x: [1, 2, 3]}, 4, 5, 6)(function (error, value) {
  console.log(error, this.x, value) // null [1, 2, 3] [4, 5, 6]
  return 'thunk!'
})(function (error, value) {
  console.log(error, this.x, value) // null [1, 2, 3] 'thunk!'
})

thunk.race([thunk1, ..., thunkX])

thunk.race(thunk1, ..., thunkX)

Возвращает дочернюю функцию thunk с результатом или ошибкой от одного первого завершённого.

thunk.digest(error, val1, val2, ...)

Возвращает дочернюю функцию thunk. Преобразует функцию обратного вызова Node.js в дочернюю функцию thunk, которая приводит к (error, val1, val2, ...). Этот результат передаётся новой дочерней функции thunk, например:

thunk(function (callback) {
  callback(error, result)
})

Один из вариантов использования:

thunk(function (callback) {
  //...
  callback(error, result)
})(function (error, value) {
  //...
  return thunk.digest(error, value)
})(function (error, value) {
  //...
})

Также вы можете написать код с использованием this:

var a = {x: 1}
thunk.digest.call(a, null, 1, 2)(function (error, value1, value2) {
  console.log(this, error, value1, value2) // { x: 1 } null 1 2
})

thunk.thunkify(fn)

Возвращает новую функцию, которая возвращает дочернюю функцию thunk. Преобразует функцию fn, написанную в стиле Node.js, в новую функцию. Эта новая функция не принимает callback в качестве аргументов, но принимает дочерние функции thunk.

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

fsStat('thunks.js')(function (error, result) {
  console.log('thunks.js: ', result)
})
fsStat('.gitignore')(function (error, result) {
  console.log('.gitignore: ', result)
})

Также можно написать код с this:

var obj = {a: 8}
function run (x, callback) {
  //...
  callback(null, this.a * x)
}

var run = thunk.thunkify.call(obj, run)

run(1)(function (error, result) {
  console.log('run 1: ', result)
})
run(2)(function (error, result) {
  console.log('run 2: ', result)
})

thunk.lift(fn)

lift происходит от Haskell, он преобразует синхронную функцию fn в новую асинхронную функцию. Эта новая функция будет принимать аргументы, которые можно оценить, затем запускать как исходную функцию fn. Новая функция возвращает дочернюю функцию thunk. ``` function calculator (a, b, c) { return (a + b + c) * 10 }

var calculatorT = thunk.lift(calculator)

var value1 = thunk(2) var value2 = Promise.resolve(3)

calculatorT(value1, value2, 5)(function (error, result) { console.log(result) // 100 })


Вы можете также написать код с использованием `this`:

```js
var calculatorT = thunk.lift.call(context, calculator)

Thunk.persist(thunkable)

Преобразует значение thunkable в функцию persist thunk, которую можно вызывать более одного раза с тем же результатом (как обещание). Новая функция возвращает дочернюю функцию thunk.

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

var persistThunk = thunk.persist(thunk(x))

persistThunk(function (error, result) {
  console.log(1, result) // x
  return persistThunk(function (error, result) {
    console.log(2, result) // x
    return persistThunk
  })
})(function (error, result) {
  console.log(3, result) // x
})

Можно также написать код с this:

var persistThunk = thunk.persist.call(context, thunkable)

Thunk.delay(delay)

Возвращает дочернюю функцию thunk, которая будет вызвана через delay миллисекунд.

console.log('thunk.delay 500: ', Date.now())
thunk.delay(500)(function () {
  console.log('thunk.delay 1000: ', Date.now())
  return thunk.delay(1000)
})(function () {
  console.log('thunk.delay end: ', Date.now())
})

Также можно написать код с помощью this:

console.log('thunk.delay start: ', Date.now())
thunk.delay.call(this, 1000)(function () {
  console.log('thunk.delay end: ', Date.now())
})

Thunk.stop([message])

Остановит процесс управления потоком с сообщением, аналогичным отменяемому обещанию (пока не реализовано). Выбросит объект сигнала остановки. Сигнал остановки — это объект с сообщением и статусом status === 19 (POSIX-сигнал SIGSTOP) и специальным кодом. Сигнал остановки может быть перехвачен onstop, а также может быть пойман try catch, в этом случае он не вызовет onstop.

var thunk = require('../thunks.js')({
  onstop: function (res) {
    if (res) console.log(res.code, res.status, res) // SIGSTOP 19 { message: 'Stop now!' }
  }
})

thunk(function (callback) {
  thunk.stop('Stop now!')
  console.log('It will not run!')
})(function (error, value) {
  console.log('It will not run!', error)
})
thunk.delay(100)(function () {
  console.log('Hello')
  return thunk.delay(100)(function () {
    thunk.stop('Stop now!')
    console.log('It will not run!')
  })
})(function (error, value) {
  console.log('It will not run!')
})

Кто использует

Комментарии ( 0 )

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

Введение

Небольшой волшебный инструмент управления асинхронным потоком, который оборачивает промис, генератор и всё, что нужно для thunk. Развернуть Свернуть
MIT
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
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