[Перевод] Новости из мира Node: promise.io, copromise, Apper

promise.io Promise.io* представляет собой модуль для удаленного вызова процедур (RPC), использующий «обещания» (promises). С его помощью можно создать вот такой сервер: var server = new PromiseIO ({ someFunc: function (input) { return 'I got: ' + input; } }); server.listen (3000); Клиент может вызвать someFunc после подключения к серверу: var client = new PromiseIO ();

client.connect ('http://localhost:3000').then (function (remote) { return remote.someFunc ('my variable!'); }).then (function (returnVal) { return console.log (returnVal); }).catch (function (err) { return console.log (err); }); Для реализации «обещаний», под капотом, используется q.copromise Copromise** немного похож на co, но данная библиотека автоматически возвращает значения которые не являются «обещаниями», так что у вас всегда есть возможность получить что-либо используя yield. Copromise представляет собой возможное значение сопрограммы. Где сопрограмма это функция-генератор, использующая ключевое слово yield для приостановления запуска и ожидания получения будущего значения. Данный подход позволяет получить линейное управление логикой исполнения (следования) для асинхронного кода.

Dean, объявил об этом на node.js list приведя несколько примеров использования и сравнения с библиотекой co. function run (coroutine) { return new Promise (function (resolve, reject) { (function next (value, exception) { var result; try { result = exception? coroutine.throw (value) : coroutine.next (value); } catch (error) { return reject (error); } if (result.done) return resolve (result.value); Promise.resolve (result.value).then (next, function (error) { next (error, true); }); })(); }); } Apper Apper*** представляет собой фреймворк реального-времени для одностаничных приложений. Идея заключается в том, что бы иметь железобетонные соглашения для практического использования одностраничных приложений, включающих прозрачную минификацию и комплектацию.Вышеописанный фреймворк является над-Express оберткой, так что определение путей маршрутизации (routes) выглядит как в обычном проекте Express, хотя Apper имеет специфические секции для таких вещей как промежуточное ПО или настройки приложения.

Например:

var app = require ('apper')({ path: '.', port: 8000, host: '0.0.0.0',

// Not commonly used. Just use `apper.json` for the configuration toOpenBrowser: false, staticContentName: 'public', moduleNames: { environment: 'environment' middleware: 'middleware', routes: 'routes', sockets: 'sockets' }, mountPath: '' }); app.start (); Где middleware.js будет: module.exports = function (app) {

app.use (function (req, res, next) { // middleware code next (); }); }; Если вы незнакомы с Express, тогда вам может понравится работать с соглашениями которые использует Apper, такой подход, по крайней мере, убережет вас от тенденции хранить все**** в виде одного большого (монолитного) файла app.js.Пометки * (GitHub: krillr/promise.io, Лизензия: Apache 2.0, npm: promise.io) от Aaron Krill.** (GitHub: deanlandolt/copromise, Лицензия: MIT, npm: copromise) от Dean Landolt.*** (GitHub: asyncanup/apper, Лицензия: MIT, npm: apper) от Anup Bishno.**** На мой взгляд, тут не совсем выражена основная мысль о том что Apper это своего рода гид и над-фремворк в мир «структурированных++» Express-приложений.

© Habrahabr.ru