de
Version:
Simple asynchronous promise-based controller
38 lines (37 loc) • 3.27 kB
JSON
{
"author": {
"name": "Golyshev Dmitrii",
"email": "golyshev.dmitry@yandex.ru"
},
"bugs": {
"url": "https://github.com/golyshevd/Model/issues"
},
"contributors": [
{
"name": "Golyshev Dmitrii",
"email": "golyshev.dmitry@yandex.ru"
}
],
"dependencies": {
"jspromise": "git://github.com/golyshevd/JSPromise.git#v1.0.x",
"node-ns": "git://github.com/golyshevd/Namespace.git#v1.0.x"
},
"description": "Simple asynchronous promise-based controller",
"devDependencies": {
"jshint": "",
"nodeunit": "",
"istanbul": ""
},
"license": "MIT",
"main": "Provider",
"name": "de",
"repository": {
"type": "git",
"url": "git://github.com/golyshevd/Model.git"
},
"scripts": {
"test": "tools/test"
},
"version": "4.0.0",
"readme": "de [](https://travis-ci.org/golyshevd/Model)\n==========\n\nSimple asynchronous promise based data agent\n\nLazy example\n---------\n```js\n\nvar Exception;\nvar Promise;\nvar StdProvider;\nvar StdRuntime;\n\nvar agent;\n\nException = require('de/util/Exception');\nPromise = require('jspromise');\nStdProvider = require('de/Provider');\nStdRuntime = require('de/util/Runtime');\n\nfunction Runtime () {\n StdRuntime.apply(this, arguments);\n}\n\nRuntime.prototype = Object.create(StdRuntime.prototype);\n\n// my Runtime turbo extension\nRuntime.prototype.getRequest = function () {\n return this.params.request;\n};\n\nfunction Provider () {\n StdProvider.apply(this, arguments);\n}\n\nProvider.prototype = Object.create(StdProvider.prototype);\n\n// @overrides default method\nProvider.prototype._createRuntime = function (params) {\n \n return new Runtime(this, params);\n};\n\nagent = new Provider();\n\n// data declaration (polymorphic)\nagent.decl('my-data-3', {\n deps: ['my-data-1', 'my-async-data', 'url', 'some-bad'],\n data: function (result, errors) {\n \n console.log(errors['some-bad']); // 9000\n \n return result['my-data-1'] + result.myAsyncData + url.query.some;\n },\n alias: 'myData3'\n});\n\nagent.decl('my-data-1', 42);\n\nagent.decl('my-async-data', {\n alias: 'myAsyncData',\n deps: 'url',\n data: function (result, errors) {\n \n // the only way to return data asynchronously (U can use ANY compilant promises/A+ implementation)\n var promise;\n \n promise = new JSPromise();\n \n setTimeout(function () {\n promise.fulfill(result.url.query.data));\n }, 5000);\n \n return promise;\n }\n});\n\nagent.decl('url', function () {\n \n var req;\n \n req = this.getRequest();\n \n console.log(this instanceof Runtime); // true\n \n return Url.parse(req.url, true);\n});\n\nagent.decl('some-bad', function () {\n throw 9000;\n});\n\n// data providing\nagent.provide({request: {\n url: '/a/b/c/?data=5&some=6'\n} }, ['my-data-3']).then(function (data) {\n \n console.log(data.result.myData3); // 5 + 6 + 42\n});\n\n```\n\nTo reject provide() promise u can throw an ```{de/util/Exception}``` instance inside data function.\ndata can be any value or promise object, not only function\n"
}