Skip to content

Instantly share code, notes, and snippets.

@tlrobinson
Forked from kriskowal/snippet.js
Created February 3, 2010 11:24
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save tlrobinson/293552 to your computer and use it in GitHub Desktop.
Save tlrobinson/293552 to your computer and use it in GitHub Desktop.
// EXAMPLE 2: async response
// AJSGI using Q promise manager
var app = function (env) {
var response = Q.defer();
setTimeout(function () {
response.resolve({ status: 200, headers: {}, body: ["foobar"] });
}, 1000);
return response.promise;
};
// EJSGI (or AJSGI using EJSGI-like helper stream/prommise combo object)
var app = function (env) {
var p = new Promise;
var s = new (env.jsgi.stream);
setTimeout(function () {
s.write("foobar");
s.close();
p.emitSuccess({ status: 200, headers: {}, body: s });
}, 1000);
return p;
};
// PSGI equivalent
var app = function(env) {
return function(respond) {
setTimeout(function() {
respond({ status: 200, headers: {}, body: ["foobar"] });
}, 1000);
}
};
// AJSGI using "then" duck typed promises manually
var app = function(env) {
return { then : function(respond) {
setTimeout(function() {
respond({ status: 200, headers: {}, body: ["foobar"] });
}, 1000);
}};
};
// EXAMPLE 3: sync response + async streaming
// AJSGI using Q promise manager
var app = function (env) {
var response = Q.defer();
return { status: 200, headers: {}, body: {
forEach: function (write) {
var close = Q.defer();
setTimeout(function() { write("foo"); }, 1000);
setTimeout(function() { write("bar"); close.resolve(); }, 2000);
return close.promise;
}
}};
};
// EJSGI (or AJSGI using EJSGI-like helper stream/prommise combo object)
var app = function (env) {
var s = new (env.jsgi.stream);
setTimeout(function () { s.write("foo"); }, 1000);
setTimeout(function () { s.write("bar"); s.close(); }, 2000);
return { status: 200, headers: {}, body: s };
};
// PSGI equivalent
var app = function(env) {
return function(respond) {
var s = respond({ status: 200, headers: {} });
setTimeout(function() { s.write("foo"); }, 1000);
setTimeout(function() { s.write("bar"); s.close(); }, 2000);
};
};
// AJSGI manually using "then" duck typed promises
var app = function(env) {
return { status: 200, headers: {}, body: {
forEach : function(write) {
return { then : function(close) {
setTimeout(function() { write("foo"); }, 1000);
setTimeout(function() { write("bar"); close(); }, 2000);
}};
}
}};
};
// EXAMPLE 4: async response + streaming body async
// AJSGI using Q promise manager
var app = function (env) {
var response = Q.defer();
setTimeout(function() {
response.resolve({ status: 200, headers: {}, body: {
"forEach": function (write) {
var close = Q.defer();
setTimeout(function() { write("foo"); }, 1000);
setTimeout(function() { write("bar"); close.resolve(); }, 2000);
return close.promise;
}
}});
}, 1000);
return response.promise;
};
// EJSGI (or AJSGI using EJSGI-like helper stream/prommise combo object)
var app = function (env) {
var p = new Promise;
setTimeout(function() {
var s = new (env.jsgi.stream);
p.emitSuccess({ status: 200, headers: {}, body: s });
setTimeout(function () { s.write("foo"); }, 1000);
setTimeout(function () { s.write("bar"); s.close(); }, 2000);
}, 1000);
return p;
};
// PSGI equivalent
var app = function(env) {
return function(respond) {
setTimeout(function() {
var s = respond({ status: 200, headers: {} });
setTimeout(function() { s.write("foo"); }, 1000);
setTimeout(function() { s.write("bar"); w.close(); }, 2000);
}, 1000);
};
};
// AJSGI manually using "then" duck typed promises
var app = function(env) {
return { then : function(respond) {
setTimeout(function() {
respond({ status: 200, headers: {}, body: {
"forEach" : function(write) {
return { then : function(close) {
setTimeout(function() { write("foo"); }, 1000);
setTimeout(function() { write("bar"); close(); }, 2000);
}};
}
}});
}, 1000)
}};
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment