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.
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 с результатом или ошибкой от одного первого завершённого.
Возвращает дочернюю функцию 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.
Преобразует функцию 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)
})
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)
Преобразует значение 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
миллисекунд.
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())
})
Остановит процесс управления потоком с сообщением, аналогичным отменяемому обещанию (пока не реализовано). Выбросит объект сигнала остановки.
Сигнал остановки — это объект с сообщением и статусом 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 )