Socket
Socket
Sign inDemoInstall

promise

Package Overview
Dependencies
0
Maintainers
1
Versions
33
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

Comparing version 2.0.0 to 3.0.0

219

index.js

@@ -1,164 +0,97 @@

var isPromise = require('is-promise')
var nextTick
if (typeof setImediate === 'function') nextTick = setImediate
else if (typeof process === 'object' && process && process.nextTick) nextTick = process.nextTick
else nextTick = function (cb) { setTimeout(cb, 0) }
var extensions = []
if (typeof setImmediate === 'function') { // IE >= 10 & node.js >= 0.10
nextTick = function(fn){ setImmediate(fn) }
} else if (typeof process !== 'undefined' && process && typeof process.nextTick === 'function') { // node.js before 0.10
nextTick = function(fn){ process.nextTick(fn) }
} else {
nextTick = function(fn){ setTimeout(fn, 0) }
}
module.exports = Promise
function Promise(fn) {
if (!(this instanceof Promise)) {
return fn ? new Promise(fn) : defer()
}
if (typeof fn !== 'function') {
throw new TypeError('fn is not a function')
}
if (!(this instanceof Promise)) return new Promise(fn)
if (typeof fn !== 'function') throw new TypeError('not a function')
var state = null
var delegating = false
var value = null
var deferreds = []
var self = this
var state = {
isResolved: false,
isSettled: false,
isFulfilled: false,
value: null,
waiting: [],
running: false
this.then = function(onFulfilled, onRejected) {
return new Promise(function(resolve, reject) {
handle({ onFulfilled: onFulfilled, onRejected: onRejected, resolve: resolve, reject: reject })
})
}
function _resolve(val) {
resolve(state, val);
function handle(deferred) {
if (state === null) {
deferreds.push(deferred)
return
}
nextTick(function() {
var cb = state ? deferred.onFulfilled : deferred.onRejected
if (typeof cb !== 'function'){
(state ? deferred.resolve : deferred.reject)(value)
return
}
var ret
try {
ret = cb(value)
}
catch (e) {
deferred.reject(e)
return
}
deferred.resolve(ret)
})
}
function _reject(err) {
reject(state, err);
}
this.then = function _then(onFulfilled, onRejected) {
return then(state, onFulfilled, onRejected);
}
_resolve.fulfill = deprecate(_resolve, 'resolver.fulfill(x)', 'resolve(x)')
_resolve.reject = deprecate(_reject, 'resolver.reject', 'reject(x)')
try {
fn(_resolve, _reject)
} catch (ex) {
_reject(ex)
function resolve(newValue) {
if (delegating)
return
resolve_(newValue)
}
}
function resolve(promiseState, value) {
if (promiseState.isResolved) return
if (isPromise(value)) {
assimilate(promiseState, value)
} else {
settle(promiseState, true, value)
}
}
function reject(promiseState, reason) {
if (promiseState.isResolved) return
settle(promiseState, false, reason)
}
function then(promiseState, onFulfilled, onRejected) {
return new Promise(function (resolve, reject) {
function done(next, skipTimeout) {
var callback = promiseState.isFulfilled ? onFulfilled : onRejected
if (typeof callback === 'function') {
function timeoutDone() {
var val
try {
val = callback(promiseState.value)
} catch (ex) {
reject(ex)
return next(true)
}
resolve(val)
next(true)
function resolve_(newValue) {
if (state !== null)
return
try { //Promise Resolution Procedure: https://github.com/promises-aplus/promises-spec#the-promise-resolution-procedure
if (newValue === self) throw new TypeError('A promise cannot be resolved with itself.')
if (newValue && (typeof newValue === 'object' || typeof newValue === 'function')) {
var then = newValue.then
if (typeof then === 'function') {
delegating = true
then.call(newValue, resolve_, reject_)
return
}
if (skipTimeout) timeoutDone()
else nextTick(timeoutDone)
} else if (promiseState.isFulfilled) {
resolve(promiseState.value)
next(skipTimeout)
} else {
reject(promiseState.value)
next(skipTimeout)
}
}
promiseState.waiting.push(done)
if (promiseState.isSettled && !promiseState.running) processQueue(promiseState)
})
}
state = true
value = newValue
finale()
} catch (e) { reject_(e) }
}
function processQueue(promiseState) {
function next(skipTimeout) {
if (promiseState.waiting.length) {
promiseState.running = true
promiseState.waiting.shift()(next, skipTimeout)
} else {
promiseState.running = false
}
function reject(newValue) {
if (delegating)
return
reject_(newValue)
}
next(false)
}
function settle(promiseState, isFulfilled, value) {
if (promiseState.isSettled) return
function reject_(newValue) {
if (state !== null)
return
state = false
value = newValue
finale()
}
promiseState.isResolved = promiseState.isSettled = true
promiseState.value = value
promiseState.isFulfilled = isFulfilled
processQueue(promiseState)
}
function assimilate(promiseState, thenable) {
try {
promiseState.isResolved = true
thenable.then(function (res) {
if (isPromise(res)) {
assimilate(promiseState, res)
} else {
settle(promiseState, true, res)
}
}, function (err) {
settle(promiseState, false, err)
})
} catch (ex) {
settle(promiseState, false, ex)
function finale() {
for (var i = 0, len = deferreds.length; i < len; i++)
handle(deferreds[i])
deferreds = null
}
}
Promise.use = function (extension) {
extensions.push(extension)
try { fn(resolve, reject) }
catch(e) { reject(e) }
}
function deprecate(method, name, alternative) {
return function () {
var err = new Error(name + ' is deprecated use ' + alternative)
if (typeof console !== 'undefined' && console && typeof console.warn === 'function') {
console.warn(name + ' is deprecated use ' + alternative)
if (err.stack) console.warn(err.stack)
} else {
nextTick(function () {
throw err
})
}
method.apply(this, arguments)
}
}
function defer() {
var err = new Error('promise.defer() is deprecated')
if (typeof console !== 'undefined' && console && typeof console.warn === 'function') {
console.warn('promise.defer() is deprecated')
if (err.stack) console.warn(err.stack)
} else {
nextTick(function () {
throw err
})
}
var resolver
var promise = new Promise(function (res) { resolver = res })
return {resolver: resolver, promise: promise}
}
{
"name": "promise",
"version": "2.0.0",
"version": "3.0.0",
"description": "Bare bones Promises/A+ implementation",
"main": "index.js",
"scripts": {
"test": "mocha -R spec --timeout 200 --slow 99999"
"test": "mocha -R spec --timeout 200 --slow 99999",
"test-resolve": "mocha test/resolver-tests.js -R spec --timeout 200 --slow 999999"
},

@@ -15,10 +16,7 @@ "repository": {

"license": "MIT",
"dependencies": {
"is-promise": "~1"
},
"devDependencies": {
"promises-aplus-tests": "*",
"mocha-as-promised": "~1.2.1",
"better-assert": "~1.0.0"
"better-assert": "~1.0",
"mocha": "~1.9"
}
}

@@ -86,1 +86,3 @@ [![Build Status](https://travis-ci.org/then/promise.png)](https://travis-ci.org/then/promise)

MIT
![viewcount](https://viewcount.jepso.com/count/then/promise.png)

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc