UNPKG

de

Version:

Simple asynchronous promise-based controller

38 lines (37 loc) 3.27 kB
{ "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 [![Build Status](https://travis-ci.org/golyshevd/Model.png?branch=v4.0.x)](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" }