Skip to content

Instantly share code, notes, and snippets.

@wryk
Last active August 29, 2015 14:05
Show Gist options
  • Save wryk/b20d6a5b7950ab82662a to your computer and use it in GitHub Desktop.
Save wryk/b20d6a5b7950ab82662a to your computer and use it in GitHub Desktop.
promise stuff
import cast from 'cast'
/**
* @param {*} values
* @return {Promise}
* @resolve {*}
* @reject {Error}
**/
export default function all (values) {
return new Promise(function (resolve, reject) {
var counter = 0
var result = []
promises
.map(cast)
.forEach(handle)
function handle (promise, index) {
promise.then(push, reject)
function push (value) {
result[index] = value
if (++counter === promises.length) {
resolve(result)
}
}
}
})
}
import is from 'is'
import resolve from 'resolve'
/**
* @param {*} value
* @return {Promise}
* @resolve {*}
**/
export default function cast (value) {
return is(value) ? value : resolve(value)
}
/**
* @param {*} value
* @return {Boolean}
**/
export default function is (value) {
return value instanceof Promise
}
/**
* @param {Array<*>} values
* @return {Promise}
* @resolve {*}
* @reject {Error}
**/
export default function race (values) {
return new Promise(function (resolve, reject) {
values
.map(cast)
.forEach(handle)
function handle (promise) {
promise.then(resolve, reject)
}
})
}
/**
* @param {Error} reason
* @return {Promise}
* @reject {Error}
**/
export default function reject (reason) {
return new Promise(function (_, reject) {
reject(reason)
})
}
/**
* @param {*} value
* @return {Promise}
* @resolve {*}
**/
export default function resolve (value) {
return new Promise(function (resolve) {
resolve(value)
})
}
import cast from 'cast'
export default function some (values, number) {
return new Promise(function (resolve, reject) {
var counter = 0
var result = []
values
.map(cast)
.forEach(handle)
function handle (promise) {
promise.then(push, reject)
}
function push (value) {
result.push(value)
if (++counter === number) resolve(result)
}
})
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment