Skip to content

Instantly share code, notes, and snippets.

View cuipengfei's full-sized avatar
:octocat:

崔鹏飞 Cui Pengfei cuipengfei

:octocat:
View GitHub Profile
@cuipengfei
cuipengfei / official solution.js
Last active January 4, 2021 17:05
functional js function spies
function Spy(target, method) {
var originalFunction = target[method]
var result = {
count: 0
}
target[method] = function() {
result.count++
return originalFunction.apply(target, arguments)
}
@cuipengfei
cuipengfei / official solution.js
Last active December 31, 2015 09:49
functional js blocking event loop
function repeat(operation, num) {
if (num <= 0) return
operation()
// release control every 10 or so
// iterations.
// 10 is arbitrary.
if (num % 10 === 0) {
setTimeout(function() {
@cuipengfei
cuipengfei / notreallyasolution.js
Last active December 31, 2015 09:59
functional js trampoline
function repeat(operation, num) {
if (num <= 0) {
return num
}
else {
operation()
num--
return num
}
}
@cuipengfei
cuipengfei / asyncLoops.js
Created December 15, 2013 10:35
functional js async loops
function loadUsers(userIds, load, done) {
var users = []
var count = 0
userIds.forEach(function (id) {
load(id, function (user) {
users[userIds.indexOf(user.id)] = user
count++
//can not use users.length here
if (count == userIds.length) {
@cuipengfei
cuipengfei / muchbettersolution.js
Created December 15, 2013 13:20
functional js recursion
function getDependencies(mod, result) {
result = result || []
var dependencies = mod.dependencies || []
Object.keys(dependencies).forEach(function(dep) {
var key = dep + '@' + mod.dependencies[dep].version
if (result.indexOf(key) === -1) result.push(key)
getDependencies(mod.dependencies[dep], result)
})
return result.sort()
}
@cuipengfei
cuipengfei / curryN.js
Created December 15, 2013 15:57
functional js curry
function curryN(fn, n) {
function wrapper(args) {
return function (oneArg) {
var argsConcat = args.concat(oneArg)
if (argsConcat.length == ( n || fn.length)) {
return fn.apply(this, argsConcat)
}
return wrapper(argsConcat)
}
}
@cuipengfei
cuipengfei / fulfil a promise.js
Created December 16, 2013 05:48
promise it wont hurt fulfil a promise
var q = require('q');
var defer = q.defer();
defer.promise.then(console.log)
setTimeout(function() {
defer.resolve("RESOLVED!")
}, 300)
@cuipengfei
cuipengfei / reject.js
Created December 16, 2013 05:57
promise it wont hurt reject a promise
var q = require('q');
var defer = q.defer();
defer.promise.then(null, function(err) {
console.log(err)
})
setTimeout(function() {
defer.reject("REJECTED!")
}, 300)
@cuipengfei
cuipengfei / resolveOrReject.js
Created December 16, 2013 13:07
promise it wont hurt resolve or reject
var q = require('q');
var defer = q.defer();
defer.promise.then(console.log, console.log)
defer.resolve("I FIRED")
defer.reject("I DID NOT FIRE")
@cuipengfei
cuipengfei / alwaysAsync.js
Created December 16, 2013 13:14
promise it wont hurt always async
var q = require('q');
var defer = q.defer();
defer.promise.then(console.log)
defer.resolve("SECOND")
console.log("FIRST")
//despite the promise being resolved synchronously,
//the provided function is not executed until the next turn of the event loop.